Supprimer par lots les commentaires des fichiers PDF

18

Comment supprimer facilement tous les commentaires et annotations (ajoutés avec Foxit Reader) de tous les PDF d'un dossier?

Andrew
la source
1
est-ce une hypothèse valable de penser que vous ne voulez que des suggestions de solutions gratuites (comme dans la bière) ou gratuites (comme dans la liberté)?
Kurt Pfeifle
@pipitas Je suis intéressé par tout type de solution.
Andrew

Réponses:

7

Je suis juste tombé sur ce problème, et aucune des réponses données ici n'a fonctionné pour moi. Ce qui a fonctionné, c'est l' rewritepdfoutil du package Ubuntu libcam-pdf-perl:

rewritepdf -C in.pdf out.pdf

Envelopper cela dans un petit script pour supprimer les annotations de tous les fichiers pdf d'un répertoire est maintenant facile:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Uli Fahrenberg
la source
Cela a bien fonctionné. :) Un peu d'aide: Le paquet Ubuntu (c'est-à-dire Debian) est ici packages.debian.org/sid/perl/libcam-pdf-perl Les dépendances sont automatiquement installées à l'aide du "Centre logiciel Ubuntu". (Oh, et attention au "-C" majuscule. J'ai d'abord exécuté "-c" et rien ne s'est produit, même aucune erreur n'a été produite.)
loves.by.Jesus
5

À condition que vous soyez sur un système Unix:

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

Il s'agit d'un hack qui supprime toutes les /Annotscommandes du PDF (les commandes qui dessinent les annotations). Il laisse les objets d'annotation là (vous pouvez ouvrir le PDF avec un éditeur de texte et les rechercher), ils ne sont tout simplement pas dessinés.

Divinenephron
la source
Pouvez-vous expliquer le RE? Qu'est-ce que [^]] + match
jftuga
1
@jftuga, s:(substitut) /Annots \[(le texte " /Annots [") [^]]+(une ou plusieurs instances de n'importe quel caractère en plus de " ]") \](le caractère littéral " ]") ::(remplacez tout ce qui correspond à l'ancien par rien) g(remplacez plusieurs fois par ligne si nécessaire).
Divinenephron
1
Une partie potentiellement confuse de l'expression régulière est qu'un littéral ]doit normalement être échappé, mais pas juste après une ^négation.
Divinenephron
Cela supprime également les liens de documents internes (car, je crois, ceux-ci sont également implémentés dans un pdf as / Annots)
Alec Jacobson
3

Je ne l'ai pas beaucoup testé, mais ce qui suit semble fonctionner. Il supprime toutes les annotations, à l' exception des liens de document internes (ce qu'aucune des réponses ne semble faire ici). Ce script dépend de la bibliothèque 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()

Usage:

  1. Enregistrer en tant que script quelque part (je suppose dans votre PATH), par exemple /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. (facultatif) traitement par lots:
# 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
la source
2

Je pense que vous pouvez le faire plus facilement en "refryant" le PDF. Refrying signifie d'abord convertir le fichier en PostScript, puis reconvertir le PostScript en PDF. Le refrying est généralement mal vu, car vous perdez généralement de la qualité et du contenu. Dans votre cas, vous souhaitez perdre le contenu. La nouvelle friture peut être effectuée avec Ghostscript (et les fichiers de commandes auxiliaires livrés avec - téléchargez le gs900w32.exesi vous êtes sous Windows), alors voilà, avec 2 commandes simples:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
Kurt Pfeifle
la source
1
Ça ne marche pas. Les commentaires écrits restent (pas en tant que commentaires, mais dans le cadre du pdf).
Andrew
2
Si les commentaires sont réellement ajoutés au contenu du PDF, ils ne peuvent être supprimés que manuellement. Les annotations PDF réelles sont séparées.
CarlF
Existe-t-il un moyen sans utiliser de convertisseur?
utilisateur
Cela supprime également les liens de documents internes.
Alec Jacobson
@AlecJacobson: Bien sûr. Si vous convertissez en PostScript, vous perdez une grande partie du contenu "riche" qui faisait partie du PDF. PostScript n'a pas les moyens de représenter N'IMPORTE QUEL lien, pas même des liens internes de document ....
Kurt Pfeifle
2

OK, vous avez dit que vous envisageriez également une solution commerciale ...

Je vous recommande d'essayer callas pdfToolbox . Il est disponible pour Windows et Mac OS X. (Ils ont également une CLI pour Linux, mais vous ne pouvez utiliser que des "profils" préconfigurés avec. Avec l'interface graphique Windows, vous pouvez créer vos profils personnalisés et les réutiliser avec la CLI Linux, cependant.

La pdfToolbox a beaucoup, beaucoup et beaucoup de façons de manipuler et de résoudre de nombreux problèmes PDF individuels.

L'un des "Fixups" consiste à supprimer toutes les annotations.

Vous n'avez pas besoin de débourser de l'argent pour le tester en premier; callas offre gratuitement des licences d'essai de 14 jours.

Kurt Pfeifle
la source
Il a en effet un moyen de supprimer toutes les annotations, mais je ne sais pas comment faire un travail par lots.
Andrew
Je ne sais pas pour les versions précédentes --- mais la dernière version de pdfToolbox5 permet de l'exécuter en mode batch sur des dossiers complets contenant des PDF .....
Kurt Pfeifle