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.