Najlepsze narzędzie do kontroli plików PDF? [Zamknięte]

94

Jak mogę sprawdzić pliki PDF, najlepiej za pomocą narzędzia?

Przykład zastosowania: próbuję programowo generować pliki PDF (przy użyciu iText). Mam problemy z uzyskaniem niektórych układów, ale mam pliki PDF z tekstem ułożonym tak, jak chcę (wygenerowane z programu Word). Chciałbym odtworzyć, jak oni to robią.

PDF Inspector wydaje się być dobry, ale szukam czegoś dla Windowsa.

bmm6o
źródło
PDF Inspector jest oparty na Javie, więc jest wieloplatformowy.
david.perez
2
Nie wydaje się jednak działać w systemie Windows. Słoik nic nie robi po kliknięciu. Po wywołaniu w wierszu poleceń otrzymujęno main manifest attribute, in PDF Document Inspector.jar
Tom
1
@ david.perez jest oparty na Javie, ale zapakowany w jabłko, więc jest to dystrybucja tylko jabłkowa. Istnieje plik „PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar”, ​​ale nie można go uruchomić jako java -jar „PDF Document Inspector.jar”. Jest też dużo pliku com.apple.cocoa. * Zawiera które są specyficzne dla platformy. :(
andrej
Teraz z powodzeniem używam Rupów iText, wieloplatformowych i opartych na Javie.
david.perez

Odpowiedzi:

18

Adobe Acrobat ma bardzo fajny, ale raczej dobrze ukryty tryb, umożliwiający przeglądanie plików PDF. Napisałem artykuł wyjaśniający to na blogu pod adresem https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/

Mark Stephens
źródło
Wydaje się, że wymaga to wtyczki; przynajmniej nie jest dostępny w programie Acrobat Reader 9.5.5 w systemie Linux.
Adam Spiers
3
@AdamSpiers, okno dialogowe inspekcji wstępnej jest funkcją programu Adobe Acrobat, a nie Adobe Reader
IPSUS
... i Acrobat ( dawniej Acrobat Exchange ) nie jest dostępny dla systemu Linux: - /
Adam Spiers
7
Okno dialogowe Inspekcja wstępna faktycznie wymaga programu Adobe Acrobat Pro. Nie jest dostępny w Adobe Acrobat Standard.
Futal
1
I faktycznie jest to koszmar interfejsu użytkownika.
Jon
87

Oprócz narzędzi opartych na graficznym interfejsie użytkownika, o których mowa w innych odpowiedziach, istnieje kilka narzędzi wiersza poleceń, które mogą przekształcić oryginalny kod źródłowy PDF w inną reprezentację, co pozwala sprawdzić (teraz zmodyfikowany plik) za pomocą edytora tekstu. Wszystkie poniższe narzędzia działają w systemie Linux, Mac OS X, innych systemach Unix lub Windows.

qpdf (mój ulubiony)

Użyj qpdf, aby zdekompresować (większość) strumieni obiektów, a także rozdzielićObjStm obiekty na poszczególne obiekty pośrednie:

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

qpdfokreśla siebie jako narzędzie, które wykonuje „strukturalne przekształcenia zachowujące zawartość plików PDF” .

Następnie po prostu otwórz + sprawdź plik uncompressed-qpdf.pdf plik w swoim ulubionym edytorze tekstu. Większość wcześniej skompresowanych (a zatem binarnych) bajtów będzie teraz zwykłym tekstem.

mutool

Istnieje również mutoolnarzędzie wiersza poleceń, które jest dostarczane w pakiecie z przeglądarką plików PDF MuPDF (która jest siostrzanym produktem Ghostscript, wyprodukowanym przez tę samą firmę Artifex ). Następujące polecenie dekompresuje również strumienie i ułatwia ich przeglądanie w edytorze tekstu:

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

podofouncompress

PoDoFo to biblioteka FreeSoftware / OpenSource do pracy z formatem PDF i zawiera kilka narzędzi wiersza poleceń, w tympodofouncompress. Użyj go w ten sposób, aby zdekompresować strumienie PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF to narzędzie oparte na języku Python, które pomaga przeglądać pliki PDF. Jego pierwotnym celem było badanie i analiza złośliwego oprogramowania opartego na plikach PDF, ale uważam, że przydatne jest również zbadanie struktury całkowicie niegroźnych plików PDF.

Można go używać interaktywnie do „przeglądania” obiektów i strumieni zawartych w pliku PDF.

Nie podam tutaj przykładu użycia, a jedynie link do jego dokumentacji:

pdfid.py i pdf-parser.py

pdfid.pyi pdf-parser.pyto dwa narzędzia PDF autorstwa Didiera Stevensa napisane w języku Python.

Ich tło ma również pomóc w eksploracji złośliwego oprogramowania plików PDF - ale uważam również, że przydatne jest analizowanie struktury i zawartości niegroźnych plików PDF.

Oto przykład, jak wyodrębnić nieskompresowany strumień obiektu PDF nr. 5 do pliku * .dump:

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

Uwagi końcowe

  1. Należy pamiętać, że niektóre części binarne w pliku PDF niekoniecznie są niekompresowalne (lub dekodowane do czytelnego dla człowieka kodu ASCII), ponieważ są osadzane i używane w swoim rodzimym formacie w plikach PDF. Takie części PDF to obrazy JPEG, czcionki lub profile kolorów ICC.

  2. Jeśli porównasz powyższe narzędzia z podanymi przykładami wiersza poleceń, odkryjesz, że NIE wszystkie dają identyczne wyniki. Sam wysiłek polegający na porównaniu ich pod kątem różnic może pomóc lepiej zrozumieć naturę składni PDF i formatu pliku.

Kurt Pfeifle
źródło
42

Używam iText RUPS (odczyt i aktualizacja składni PDF) w Linuksie. Ponieważ jest napisany w Javie, działa również w systemie Windows. Możesz przeglądać wszystkie obiekty w pliku PDF w strukturze drzewa. Może również dekodować strumienie zakodowane w formacie Flate na bieżąco, aby ułatwić kontrolę.

Oto zrzut ekranu:

Zrzut ekranu iText RUPS

gkcn
źródło
9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Jak masz to uruchomić? Edycja: rozgryzłem to. Nie powinieneś pobierać domyślnego pliku oferowanego przez SourceForge, musisz pobrać plik .jar, który zawiera zależności.
Zero3
2
@ Zero3 właśnie natknęło się na to samo. Dzięki za komentarz.
Sam
1
@KurtPfeifle Całkowicie się zgadzam. Niestety, wiele programów (takich jak to!) Jest dostępnych tylko za pośrednictwem SourceForge, ponieważ opiekun nie przeniósł jeszcze projektu w inne miejsce i może nigdy tego nie zrobić. Rzeczywiście powinieneś być bardzo ostrożny podczas pobierania czegokolwiek z SourceForge w tych dniach ...
Zero3
7
Tak - jako skompilowany jar, a nawet jako exe, dla użytkowników systemu Windows. Zobacz github.com/itext/rups/releases/latest
Amedee Van Gasse
1
@AmedeeVanGasse Zrzut ekranu w tej odpowiedzi przedstawia widok strony (między drzewem dokumentu a kartą odnośnika). Jak mogę wyświetlić ten widok w wersji 5.5.9 w systemie Windows?
iPDFdev
5

Użyłem PDFBox z dobrym sukcesem. Oto próbka tego, jak wygląda kod (z wersji 0.7.2), który prawdopodobnie pochodzi z jednego z podanych przykładów:

// 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());
Kaleb Pederson
źródło
4

Jest też inna opcja. Adobe Acrobat Pro może także wyświetlać wewnętrzną strukturę drzewa pliku PDF.

  1. Otwórz inspekcję wstępną
  2. Idź do opcji (prawy górny róg)
  3. Wewnętrzna struktura PDF

Na wierzchu Adobe Acrobat Pro może również wyświetlać wewnętrzną strukturę czcionek dokumentu w PDF, większość innych "przeglądarek struktury drzewa PDF" nie ma tej możliwości

wprowadź opis obrazu tutaj

Vadimo
źródło
2
To właśnie opisuje @ mark-stephens w zaakceptowanej odpowiedzi.
koppor
3
Odpowiedź @ mark-stephens to tylko linki do posta na blogu, który może zniknąć w przyszłości (i jest odradzany w SO). vadimo faktycznie dostarcza odpowiedzi.
Rozgwiazda
3

Przeglądarka obiektów w programie Acrobat jest dobra, ale PDF Canopener firmy Windjack Solution umożliwia lepszą kontrolę za pomocą kroplomierza do wybierania obiektów na stronie. Pozwala również na modyfikacje w formacie PDF.

http://www.windjack.com/products/pdfcanopener.html

Dwight Kelly
źródło
1

Jeśli chcesz pracować programowo z poziomu Pythona, pdfminer jest dobrą opcją. Pozwala pracować ze strukturą PDF w pamięci jako hierarchią obiektów lub serializować ją jako XML.

WP McNeill
źródło
-6

Moją sugestią jest Foxit PDF Reader, który jest bardzo pomocny w wykonywaniu ważnych prac związanych z edycją tekstu na pliku pdf.

nifCody
źródło
6
W Foxit Reader nie mogłem znaleźć żadnego sposobu, aby wyświetlić wewnętrzną strukturę pliku PDF podobnego do PDF Inspector (przywołanego w pytaniu)
bmaupin