Batch rimuove i commenti dai file PDF


18

Come posso rimuovere facilmente tutti i commenti e le annotazioni (aggiunti con Foxit Reader) da tutti i PDF in una cartella?


1
è un presupposto valido pensare di volere solo suggerimenti per soluzioni gratuite (come nella birra) o gratuite (come nella libertà)?
Kurt Pfeifle,

@pipitas Sono interessato a qualsiasi tipo di soluzione.
Andrew,

Risposte:


7

Sono appena caduto su questo problema e nessuna delle risposte fornite qui ha funzionato per me. Ciò che ha funzionato è stato lo rewritepdfstrumento dal pacchetto Ubuntu libcam-pdf-perl:

rewritepdf -C in.pdf out.pdf

Avvolgere questo in un piccolo script per rimuovere le annotazioni da tutti i file pdf in una directory è ora facile:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done

Funzionava bene. :) Alcuni aiuti: il pacchetto Ubuntu (ie, debian) è qui Packages.debian.org/sid/perl/libcam-pdf-perl Le dipendenze vengono installate automaticamente usando "Ubuntu software center". (Oh, e attenzione con la "" C "maiuscola. Ho eseguito prima" -c "e non è successo nulla, anche se non è stato emesso alcun errore.)
loved.by.Gesus

5

A condizione che tu sia su un sistema Unix:

cd <directory containing PDFs>
find . -type f -name '*.pdf' -exec perl -pi -e 's:/Annots \[[^]]+\]::g' {} +

Questo è un trucco che rimuove tutti i /Annotscomandi dal PDF (i comandi che disegna le annotazioni). Lascia lì gli oggetti delle annotazioni (puoi aprire il PDF con un editor di testo e cercarli), non sono semplicemente disegnati.


Puoi spiegare l'IR? Cosa corrisponde [^]] +
jftuga

1
@jftuga, s:(sostituto) /Annots \[(il testo " /Annots [") [^]]+(una o più istanze di qualsiasi carattere oltre a " ]") \](il carattere letterale " ]") ::(sostituisci qualsiasi cosa che corrisponda alla prima con nulla) g(sostituisci più volte per riga se necessario).
Divinenephron,

1
Una parte potenzialmente confusa della regex è che un letterale ]deve normalmente essere evaso, ma non subito dopo una ^negazione.
Divinenephron,

Questo rimuove anche i collegamenti ai documenti interni (poiché, credo, quelli sono implementati in un pdf anche come / Annotazioni)
Alec Jacobson,

3

Non l'ho testato molto, ma quanto segue sembra funzionare. Elimina tutte le annotazioni, tranne i collegamenti ai documenti interni (che nessuna delle risposte qui sembra fare). Questo script dipende dalla libreria pdfrw python.

#!/usr/bin/python

import sys, pdfrw

try:
    in_path = sys.argv[1]
    out = sys.argv[2]
except:
    print("Usage:\tannotclean IN.pdf OUT.pdf")
    exit(0)

reader = pdfrw.PdfReader(in_path)

for p in reader.pages:
    if p.Annots:
        # See PDF reference, Sec. 12.5.6 for all annotation types
        p.Annots = [a for a in p.Annots if a.Subtype == "/Link"]

pdfrw.PdfWriter(out, trailer=reader).write()

Uso:

  1. Salva come script da qualche parte (presumo nel tuo PATH), ad es /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. (opzionale) elaborazione batch:
# fish shell syntax
for p in **pdf # pdfs from current directory and subdirectories
    annotclean $p $p.new
    mv $p.new $p # overwrite the old
end 

2

Penso che tu possa farlo più facilmente "aggiornando" il PDF. Aggiornamento significa: prima convertire il file in PostScript, quindi convertire il PostScript in PDF. Di solito è poco gradito rinfrescarsi, perché di solito perdi qualità e contenuto. Nel tuo caso, vuoi perdere il contenuto. Il re-frittura può essere fatto con Ghostscript (e i file batch dell'helper forniti con esso - scarica il gs900w32.exese sei su Windows), quindi eccoti qui, con 2 semplici comandi:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf

1
Questo non funziona I commenti scritti rimangono (non come commenti, ma come parte del pdf).
Andrew,

2
Se i commenti vengono effettivamente aggiunti al contenuto del PDF, possono essere rimossi solo manualmente. Le annotazioni PDF effettive sono separate.
CarlF,

Esiste un modo senza usare alcun convertitore?
utente

Ciò rimuove anche i collegamenti ai documenti interni.
Alec Jacobson,

@AlecJacobson: Certo. Se si converte in PostScript, si perde molto del contenuto "ricco" che faceva parte del PDF. PostScript non ha i mezzi per rappresentare QUALSIASI link, nemmeno collegamenti a documenti interni ....
Kurt Pfeifle

2

OK, hai detto che avresti considerato anche una soluzione commerciale ...

Ti consiglierei di provare callas pdfToolbox . È disponibile per Windows e Mac OS X. (Hanno anche una CLI per Linux, ma puoi utilizzare solo "profili" preconfigurati. Con la GUI di Windows puoi creare i tuoi profili personalizzati e riutilizzarli con l'interfaccia della riga di comando di Linux, tuttavia.

PdfToolbox offre moltissimi modi per manipolare e risolvere molti, molti singoli problemi PDF.

Uno dei "Fixup" è rimuovere tutte le annotazioni.

Non è necessario sborsare denaro per testarlo prima; callas rilascia gratuitamente licenze di prova di 14 giorni.


In effetti ha un modo per rimuovere tutte le annotazioni, ma non sono sicuro di come eseguire un processo batch.
Andrew,

Non so delle versioni precedenti --- ma l'ultima versione di pdfToolbox5 consente di eseguirlo in modalità batch su cartelle complete contenenti PDF .....
Kurt Pfeifle
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.