Eliminar por lotes comentarios de archivos PDF

18

¿Cómo puedo eliminar fácilmente todos los comentarios y anotaciones (agregados con Foxit Reader) de todos los archivos PDF en una carpeta?

Andrés
fuente
1
¿Es una suposición válida pensar que solo quieres sugerencias para soluciones gratuitas (como en cerveza) o gratuitas (como en libertad)?
Kurt Pfeifle
@pipitas Estoy interesado en cualquier tipo de solución.
Andrew

Respuestas:

7

Acabo de caer sobre este problema, y ​​ninguna de las respuestas dadas aquí funcionó para mí. Lo que funcionó fue la rewritepdfherramienta del paquete de Ubuntu libcam-pdf-perl:

rewritepdf -C in.pdf out.pdf

Envolver esto en un pequeño script para eliminar anotaciones de todos los archivos pdf en un directorio ahora es fácil:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Uli Fahrenberg
fuente
Funcionó bien. :) Alguna ayuda: El paquete Ubuntu (es decir, debian) está aquí. Paquetes.debian.org/sid/perl/libcam-pdf-perl Las dependencias se instalan automáticamente usando el "centro de software de Ubuntu". (Ah, y cuidado con la "-C" mayúscula. Primero ejecuté "-c" y no pasó nada, incluso no se produjo ningún error.)
amado.por.Jesús
5

Siempre que esté en un sistema Unix:

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

Este es un truco que elimina todos los /Annotscomandos del PDF (los comandos que dibujan las anotaciones). Deja los objetos de anotación allí (puede abrir el PDF con un editor de texto y buscarlos), simplemente no están dibujados.

Divinenephron
fuente
¿Puedes explicar el RE? Qué hace [^]] + partido
jftuga
1
@jftuga, s:(sustituto) /Annots \[(el texto " /Annots [") [^]]+(una o más instancias de cualquier carácter además de " ]") \](el carácter literal " ]") ::(reemplace todo lo que coincida con el anterior por nada) g(reemplace varias veces por línea si es necesario).
Divinenephron
1
Una parte potencialmente confusa de la expresión regular es que ]normalmente se debe escapar un literal , pero no justo después de una ^negación.
Divinenephron
Esto también elimina los enlaces a documentos internos (ya que, creo, también se implementan en un pdf como / Annots)
Alec Jacobson
3

No lo he probado mucho, pero lo siguiente parece funcionar. Elimina todas las anotaciones, excepto los enlaces de documentos internos (que ninguna de las respuestas aquí parece hacer). Este script depende de la biblioteca 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. Guardar como un script en alguna parte (supongo que en su PATH), por ejemplo /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. (opcional) procesamiento por lotes:
# 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 
rien333
fuente
2

Yo creo que puede hacer que más fácilmente "refrying" el PDF. Refry significa: primero convierta el archivo a PostScript, luego convierta el PostScript nuevamente a PDF. Por lo general, la refutación está mal vista, porque generalmente pierdes calidad y algo de contenido. En su caso, desea perder el contenido. El freír se puede hacer con Ghostscript (y los archivos por lotes auxiliares que se envían con él; descargue el gs900w32.exesi está en Windows), así que aquí tiene dos comandos sencillos:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
Kurt Pfeifle
fuente
1
Esto no funciona Los comentarios escritos permanecen (no como comentarios, sino como parte del pdf).
Andrew
2
Si los comentarios se agregan realmente al contenido del PDF, solo se pueden eliminar manualmente. Las anotaciones reales en PDF están separadas.
CarlF
¿Hay alguna manera sin usar ningún convertidor?
usuario
Esto también elimina los enlaces a documentos internos.
Alec Jacobson el
@ AlecJacobson: Por supuesto. Si convierte a PostScript, pierde gran parte del contenido "rico" que formaba parte de PDF. PostScript no tiene los medios para representar NINGÚN enlace, ni siquiera los enlaces de documentos internos ...
Kurt Pfeifle
2

OK, dijiste que también considerarías una solución comercial ...

Te recomiendo que pruebes callas pdfToolbox . Está disponible para Windows y Mac OS X. (También tienen una CLI para Linux, pero solo puede usar "perfiles" preconfigurados. Con la GUI de Windows, puede crear sus perfiles personalizados y reutilizarlos con la CLI de Linux, sin embargo.

PdfToolbox tiene muchísimas maneras de manipular y solucionar muchos, muchos problemas individuales de PDF.

Una de las "reparaciones" es eliminar todas las anotaciones.

No necesita desembolsar dinero para probarlo primero; callas otorga licencias de prueba de 14 días de forma gratuita.

Kurt Pfeifle
fuente
De hecho, tiene una forma de eliminar todas las anotaciones, pero no estoy seguro de cómo hacer un trabajo por lotes.
Andrew
No sé sobre versiones anteriores --- pero la última versión de pdfToolbox5 permite ejecutarlo en modo por lotes en carpetas completas que contienen archivos PDF .....
Kurt Pfeifle