Il miglior strumento per ispezionare i file PDF? [chiuso]


91

Quale strumento consigli per ispezionare i file PDF?

Caso d'uso: sto cercando di generare file PDF a livello di programmazione (utilizzando iText). Ho problemi a ottenere determinati layout, ma ho file PDF con testo disposto nel modo desiderato (generato da Word). Vorrei decodificare il modo in cui lo fanno.

PDF Inspector sembra essere buono, ma sto cercando qualcosa per Windows.


PDF Inspector è basato su Java, quindi multipiattaforma.
david.perez

2
Tuttavia, non sembra funzionare su Windows. Il barattolo non fa nulla quando viene cliccato. Quando viene chiamato dalla riga di comando, ottengono main manifest attribute, in PDF Document Inspector.jar
Tom

@ david.perez è basato su java ma apple avvolto quindi è una specie di distribuzione solo apple. C'è "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar" jar ma non è avviabile come java -jar "PDF Document Inspector.jar" Inoltre c'è molto com.apple.cocoa. * Include che sono specifici della piattaforma. :(
andrej

Ora sto usando con successo iText Rups, multipiattaforma e basato su Java.
david.perez

Risposte:


18

Adobe Acrobat ha una modalità molto interessante ma piuttosto ben nascosta che ti consente di ispezionare i file PDF. Ho scritto un articolo sul blog spiegandolo su https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/


Questo sembra richiedere un plugin; almeno non è disponibile in Acrobat Reader 9.5.5 su Linux.
Adam Spires

3
@AdamSpiers, la finestra di dialogo di verifica preliminare è una funzionalità di Adobe Acrobat, non Adobe Reader
IPSUS

... e Acrobat ( precedentemente Acrobat Exchange ) non è disponibile per Linux: - /
Adam Spires

7
La finestra di dialogo Verifica preliminare richiede effettivamente Adobe Acrobat Pro. Non è disponibile in Adobe Acrobat Standard.
Futal

1
Ed è un incubo dell'interfaccia utente da utilizzare effettivamente.
Jon

83

Oltre agli strumenti basati su GUI menzionati nelle altre risposte, ci sono alcuni strumenti a riga di comando che possono trasformare il codice sorgente PDF originale in una rappresentazione diversa che ti consente di ispezionare il file (ora modificato) con un editor di testo. Tutti gli strumenti seguenti funzionano su Linux, Mac OS X, altri sistemi Unix o Windows.

qpdf (il mio preferito)

Usa qpdf per decomprimere (la maggior parte) dei flussi di ObjStmoggetti e anche sezionare gli oggetti in singoli oggetti indiretti:

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdfsi descrive come uno strumento che esegue "trasformazioni strutturali che preservano il contenuto sui file PDF" .

Quindi apri e ispeziona il uncompressed-qpdf.pdffile nel tuo editor di testo preferito. La maggior parte dei byte precedentemente compressi (e quindi binari) sarà ora testo normale.

mutool

C'è anche lo mutoolstrumento della riga di comando che viene fornito in bundle con il visualizzatore PDF MuPDF (che è un prodotto gemello di Ghostscript, realizzato dalla stessa azienda, Artifex ). Il comando seguente decomprime anche i flussi e li rende più facili da ispezionare tramite un editor di testo:

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFo è una libreria FreeSoftware / OpenSource per lavorare con il formato PDF e include alcuni strumenti a riga di comando, inclusopodofouncompress. Usalo in questo modo per decomprimere flussi PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF è uno strumento basato su Python che ti aiuta a esplorare i file PDF. Il suo scopo originale era la ricerca e la dissezione di malware basato su PDF, ma lo trovo utile anche per indagare sulla struttura di file PDF completamente innocui.

Può essere utilizzato in modo interattivo per "sfogliare" gli oggetti e gli stream contenuti in un PDF.

Non fornirò un esempio di utilizzo qui, ma solo un collegamento alla sua documentazione:

pdfid.py e pdf-parser.py

pdfid.pye pdf-parser.pysono due strumenti PDF di Didier Stevens scritti in Python.

Il loro background serve anche a esplorare PDF dannosi , ma trovo utile anche analizzare la struttura e il contenuto di file PDF dannosi .

Ecco un esempio di come estrarre il flusso non compresso dell'oggetto PDF n. 5 in un file * .dump:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

Note finali

  1. Tieni presente che alcune parti binarie all'interno di un PDF non sono necessariamente non comprimibili (o decodificabili in codice ASCII leggibile dall'uomo), perché sono incorporate e utilizzate nel loro formato nativo all'interno dei PDF. Tali parti PDF sono immagini JPEG, caratteri o profili colore ICC.

  2. Se confronti gli strumenti sopra e gli esempi della riga di comando forniti, scoprirai che NON producono tutti output identici. Lo sforzo di confrontarli per le loro differenze in sé può aiutarti a comprendere meglio la natura della sintassi e del formato del file PDF.


42

Uso iText RUPS (lettura e aggiornamento della sintassi PDF) in Linux. Poiché è scritto in Java, funziona anche su Windows. È possibile sfogliare tutti gli oggetti nel file PDF in una struttura ad albero. Può anche decodificare flussi codificati Flate al volo per facilitare l'ispezione.

Ecco uno screenshot:

Screenshot di iText RUPS


9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Come dovresti eseguire questa cosa? Modifica: capito. Non dovresti scaricare il file predefinito offerto da SourceForge, devi scaricare il .jar che include le dipendenze.
Zero3

2
@ Zero3 si è appena imbattuto nella stessa cosa. Grazie per il tuo commento.
Sam

1
@KurtPfeifle Sono completamente d'accordo. Sfortunatamente, molto software (come questo!) È disponibile solo tramite SourceForge perché il manutentore non ha ancora spostato il progetto altrove e potrebbe non farlo mai. Dovresti davvero stare molto attento quando scarichi qualcosa da SourceForge in questi giorni ...
Zero3

7
Sì, come jar compilato e anche come exe, per utenti Windows. Vedi github.com/itext/rups/releases/latest
Amedee Van Gasse

1
@AmedeeVanGasse lo screenshot in questa risposta mostra una vista della pagina (tra l'albero del documento e la scheda xref). Come posso visualizzare quella vista in v5.5.9 su Windows?
iPDFdev


5

Ho usato PDFBox con buon successo. Ecco un esempio di come appare il codice (dalla versione 0.7.2), che probabilmente proviene da uno degli esempi forniti:

// 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());


3

C'è anche un'altra opzione. Adobe Acrobat Pro è anche in grado di visualizzare la struttura ad albero interna del PDF.

  1. Apri Preflight
  2. Vai a Opzioni (angolo in alto a destra)
  3. Struttura PDF interna

Inoltre Adobe Acrobat Pro può anche visualizzare la struttura interna dei font del documento nel PDF la maggior parte degli altri "visualizzatori di struttura ad albero PDF" non hanno questa opzione

inserisci qui la descrizione dell'immagine


2
Questo è ciò che @ mark-stephens descrive nella risposta accettata.
koppor

3
La risposta di @ mark-stephens si limita a rimandare a un post sul blog che potrebbe scomparire in futuro (ed è sconsigliato su SO). vadimo's fornisce effettivamente la risposta.
Starfish

1

Se vuoi lavorare in modo programmatico da Python, pdfminer è una buona opzione. Ti consente di lavorare con la struttura PDF in memoria come una gerarchia di oggetti o di serializzarla come XML.



-6

Il mio suggerimento è Foxit PDF Reader che è molto utile per fare importanti lavori di modifica del testo su file pdf.


6
Non sono riuscito a trovare alcun modo in Foxit Reader per visualizzare la struttura interna di un PDF simile a PDF Inspector (a cui si fa riferimento nella domanda)
bmaupin
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.