J'ai besoin de trouver la différence entre deux fichiers PDF. Est-ce que quelqu'un connaît-il de tout outil lié à Python qui a une fonctionnalité qui donne directement Diff des deux PDFS? P>
5 Réponses :
Que voulez-vous dire par "différence"? Une différence dans le texte du PDF ou un changement de présentation (par exemple un graphique intégré a été redimensionné). Le premier est facile à détecter, la seconde est presque impossible à obtenir (PDF est un format de fichier très compliqué, offrant des capacités de formatage des fichiers sans fin). P>
Si vous souhaitez obtenir le texte diff, il vous suffit d'exécuter un fichier PDF à un utilitaire de texte sur les deux PDF, puis utilisez la bibliothèque DIFF intégrée de Python pour faire la différence des textes convertis. P>
Cette question concerne le PDF à la conversion de texte à Python: module Python pour la conversion PDF au texte . P>
La fiabilité de cette méthode dépend des générateurs PDF que vous utilisez. Si vous utilisez E.G. Adobe Acrobat et certains PDF-Créateur basé sur Ghostscript pour effectuer deux PDF à partir du même document Word, vous pourriez toujours obtenir un DIFF bien que le document source soit identique. p>
En effet, il existe des dizaines de façons d'encoder les informations du document source à un fichier PDF et chaque convertisseur utilise une approche différente. Souvent, le convertisseur PDF au texte ne peut pas comprendre le flux de texte correct, en particulier avec des dispositions ou des tables complexes. P>
Juste le texte va faire. Le générateur PDF ne devrait pas être un problème.
Si vous devez prendre en charge les images, vous pouvez extraire des JPGS à partir d'un PDF: Nedbatchelder.com/blog/ 200712 / extraction_jpgs_from_pdfs.html ou convertissez le PDF en une image et comparez cela.
Vérifiez cela, il peut être utile: http://pybrary.net/pypypdf/ < / p>
PYPDF n'était pas très robuste dans mes tests. Il s'est écrasé sur des fichiers PDF créés par Illustrator / InDesign et d'autres programmes de dessin vectoriel. Cependant, cela pourrait être correct pour les PDF simples des applications Office. Une alternative beaucoup plus solide est pdftotext de la boîte à outils XPDF.
Je ne connais pas votre cas d'utilisation, mais pour les tests de régression du script qui génère un PDF à l'aide de rappel, je fais des fichiers PDF par
E.g p> Ceci fonctionne dans mon cas pour signaler toute modification introduite en raison de changements de code. P> P>
Y a-t-il une référence pour votre étape 1?
a rencontré la même question sur mon PDF crypté Unittest, ni pdfminer ni pypdf ne fonctionne bien pour moi.
Voici deux commandes (PDFTOCAIRO, PDFTOTEXT) fonctionner parfaitement sur mon test. (Ubuntu Installer: APT-GET INSTALL POPPLER-UTILS) P>
Vous pouvez obtenir le contenu PDF par: P>
c1 = get_formatted_content(open('f1.pdf').read()) c2 = get_formatted_content(open('f2.pdf').read()) print(cmp(c1, c2)) # for binary compare # import difflib # print(list(difflib.unified_diff(c1, c2))) # for text compare
Même si cette question est assez ancienne, je suppose que je peux contribuer au sujet.
Nous avons plusieurs applications générant des tonnes de PDFS. Une de ces applications est écrite dans Python et je voulais récemment écrire des tests d'intégration pour vérifier si la génération PDF fonctionnait correctement. P>
Test génération PDF est La solution: nous devons aller avec le test de la façon dont ils ressemblent (parce que que EM> devrait être déterministe!) Il suffit de besoin d'un nom de fichier ou de la blob PDF (octets) du générateur. Nous avons également besoin d'un fichier d'attente contenant un «bon» pdf de comparer avec celui provenant du générateur. P> Les PDF sont convertis en images, puis comparées. Cela peut être fait de plusieurs manières, mais nous avons décidé d'utiliser Le test ressemble à quelque chose comme ce qui suit. Les détails spécifiques de notre mise en œuvre ont été supprimés et l'exemple a été simplifié: p> imagemagick code>, car il est extrêmement polyvalent et très mature, avec des liaisons pour presque tous les langages de programmation. Pour Python 3, les reliures sont proposées par le package
WAND code>. P>
0.01 code> est aussi bas que possible de tolérer de petites différences. Considérant que
diff [1] code> varie de 0 à 1 à l'aide de la métrique
root_mean_square code>, nous acceptons ici une différence jusqu'à 1% sur tous les canaux, comparant avec le fichier attendu de l'échantillon. . p> p>
Differez-vous le texte ou le contenu entier ou la taille?