Quel outil recommandez-vous pour inspecter les fichiers PDF?
Cas d'utilisation: j'essaie de générer par programme des fichiers PDF (à l'aide d'iText). Je ne parviens pas à obtenir certaines mises en forme, mais j’ai PDF des fichiers contenant le texte à ma manière (généré à partir de Word). Je voudrais faire de l'ingénierie inverse comment ils le font.
PDF Inspecteur semble être bon, mais je cherche quelque chose pour Windows.
Adobe Acrobat a un mode très cool mais plutôt bien caché vous permettant d’inspecter des fichiers PDF. J'ai écrit un article de blog en l'expliquant à https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/
Outre les outils graphiques cités dans les autres réponses, il existe quelques outils de ligne de commande permettant de transformer le code source PDF d'origine en une représentation différente vous permettant d'inspecter le fichier (maintenant modifié) à l'aide d'un éditeur de texte. Tous les outils ci-dessous fonctionnent sous Linux, Mac OS X, d'autres systèmes Unix ou Windows.
qpdf
(mon préféré)Utilisez qpdf pour décompresser les flux de la plupart des objets et disséquer les objets ObjStm
en objets indirects individuels:
qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf
qpdf
se décrit comme un outil qui effectue "transformations structurelles préservant le contenu sur les fichiers PDF".
Ensuite, ouvrez simplement et inspectez le fichier uncompressed-qpdf.pdf
dans votre éditeur de texte préféré. La plupart des octets précédemment compressés (et donc binaires) seront désormais du texte brut.
mutool
Il existe également l'outil de ligne de commande mutool
fourni avec le visualiseur MuPDF PDF (qui est un produit apparenté à Ghostscript, créé par la même société, Artifex ). La commande suivante décompresse également les flux et les rend plus faciles à inspecter via un éditeur de texte:
mutool clean -d orig.pdf uncompressed-mutool.pdf
podofouncompress
PoDoFo est une bibliothèque FreeSoftware/OpenSource qui fonctionne avec le format PDF. Elle comprend quelques outils de ligne de commande, notamment podofouncompress
. Utilisez-le comme ceci pour décompresser les flux PDF:
podofouncompress orig.pdf uncompressed-podofo.pdf
peepdf.py
PeePDF est un outil basé sur Python qui vous aide à explorer les fichiers PDF. Son objectif initial était de rechercher et disséquer les logiciels malveillants basés sur PDF, mais j'estime également utile d'étudier la structure de fichiers PDF totalement anodins.
Il peut être utilisé de manière interactive pour "parcourir" les objets et les flux contenus dans un PDF.
Je ne donnerai pas un exemple d'utilisation ici, mais seulement un lien vers sa documentation:
pdfid.py
et pdf-parser.py
pdfid.py
et pdf-parser.py
sont deux outils PDF de Didier Stevens écrits en Python.
Leur arrière-plan est également utile pour explorer les malveillants PDF - mais je trouve également utile d'analyser la structure et le contenu des fichiers bénins PDF.
Voici un exemple de la manière dont je voudrais extraire le flux non compressé de l'objet PDF n °. 5 dans un fichier * .dump:
pdf-parser.py -o 5 -f -d obj5.dump my.pdf
Veuillez noter que certaines parties binaires d'un PDF ne sont pas nécessairement incompressibles (ou décodables en code lisible par un humain ASCII), car elles sont incorporées et utilisées dans leur format natif dans les fichiers PDF. Ces éléments PDF sont des images JPEG, des polices ou des profils de couleur ICC.
Si vous comparez les outils ci-dessus et les exemples de ligne de commande donnés, vous découvrirez qu'ils _ PAS produisent tous des résultats identiques. L’effort de les comparer pour leurs différences en soi peut vous aider à mieux comprendre la nature de la syntaxe et du format de fichier PDF.
J'utilise iText RUPS (syntaxe de lecture et de mise à jour PDF) sous Linux. Comme il est écrit en Java, cela fonctionne aussi sous Windows. Vous pouvez parcourir tous les objets du fichier PDF dans une arborescence. Il peut également décoder les flux codés Flate à la volée pour faciliter l'inspection.
Voici une capture d'écran:
J'ai utilisé PDFBox avec un bon succès. Voici un exemple du code (de retour de la version 0.7.2), probablement tiré d'un des exemples fournis:
// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;
doc = PDDocument.load(filename);
// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
//System.out.println(o.toString() + " " + dict.getString(o));
System.out.println(o.toString());
}
// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);
List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());
La visionneuse d'objets dans Acrobat est bonne, mais Canopener PDF de Windjack Solution permet une meilleure inspection avec une pipette pour la sélection d'objets sur la page. Permet également d'apporter des modifications au format PDF.
Il y a aussi une autre option. Adobe Acrobat Pro est également capable d'afficher l'arborescence interne du PDF.
De plus, Adobe Acrobat Pro peut également afficher la structure interne des polices de document dans la PDF, la plupart des autres "visionneuses de structure d’arborescence PDF" n’ont pas cette otion.
PDFXplorer de O2 Solutions fait un travail remarquable d’affichage des éléments internes.
http://www.o2sol.com/pdfxplorer/overview.htm
(Bannière libre et distrayante en bas).
Si vous voulez travailler par programmation depuis Python, pdfminer est une bonne option. Il vous permet de travailler avec la structure PDF en mémoire en tant que hiérarchie d'objets ou de la sérialiser en XML.
PDF Analyzer est similaire à PDFXplorer , mais il offre davantage d'options. Il est également gratuit après une seule inscription.