Công cụ tốt nhất để kiểm tra tệp PDF? [đóng cửa]


89

Bạn đề xuất công cụ nào để kiểm tra tệp PDF?

Trường hợp sử dụng: Tôi đang cố gắng tạo tệp PDF theo chương trình (sử dụng iText). Tôi đang gặp sự cố khi đạt được một số bố cục nhất định, nhưng tôi có các tệp PDF với văn bản được trình bày theo cách tôi muốn (được tạo từ Word). Tôi muốn thiết kế ngược lại cách họ làm điều đó.

Trình kiểm tra PDF có vẻ tốt, nhưng tôi đang tìm kiếm thứ gì đó cho Windows.


Trình kiểm tra PDF dựa trên Java, vì vậy đa dạng.
david.perez

2
Tuy nhiên, dường như không chạy trên Windows. Cái lọ không làm gì cả khi được bấm vào. Khi được gọi theo dòng lệnh tôi nhận đượcno main manifest attribute, in PDF Document Inspector.jar
Tom

@ david.perez nó dựa trên java nhưng được bọc táo nên nó giống như chỉ phân phối táo. Có jar "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar" nhưng nó không thể khởi động được như java -jar "PDF Document Inspector.jar" Ngoài ra, có rất nhiều com.apple.cocoa. * Bao gồm đó là nền tảng cụ thể. :(
andrej

Tôi hiện đang sử dụng thành công iText Rups, multiplatform và dựa trên Java.
david.perez

Câu trả lời:


18

Adobe Acrobat có một chế độ ẩn rất thú vị nhưng khá tốt cho phép bạn kiểm tra các tệp PDF. Tôi đã viết một bài blog giải thích nó tại https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/


Điều này dường như yêu cầu một plugin; ít nhất là nó không có sẵn trong Acrobat Reader 9.5.5 trên Linux.
Adam Spiers

3
@AdamSpiers, hộp thoại preflight là một tính năng của Adobe Acrobat, không phải Adobe Reader
IPSUS

... và Acrobat ( trước đây là Acrobat Exchange ) không có sẵn cho Linux: - /
Adam Spiers

7
Hộp thoại Preflight thực sự yêu cầu Adobe Acrobat Pro. Nó không có sẵn trong Adobe Acrobat Standard.
Futal

Và nó là một cơn ác mộng giao diện người dùng để thực sự sử dụng.
Jon

82

Bên cạnh các công cụ dựa trên GUI được đề cập trong các câu trả lời khác, có một số công cụ dòng lệnh có thể chuyển đổi mã nguồn PDF ban đầu thành một biểu diễn khác cho phép bạn kiểm tra (tệp hiện đã được sửa đổi) bằng trình chỉnh sửa văn bản. Tất cả các công cụ dưới đây hoạt động trên Linux, Mac OS X, các hệ thống Unix khác hoặc Windows.

qpdf (yêu thích của tôi)

Sử dụng qpdf để giải nén (hầu hết) các luồng của đối tượng và cũng phân ObjStmtách các đối tượng thành các đối tượng gián tiếp riêng lẻ:

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

qpdftự mô tả bản thân nó như một công cụ thực hiện "chuyển đổi cấu trúc, bảo toàn nội dung trên tệp PDF" .

Sau đó, chỉ cần mở + kiểm tra uncompressed-qpdf.pdftệp trong trình soạn thảo văn bản yêu thích của bạn. Hầu hết các byte được nén trước đây (và do đó, nhị phân) bây giờ sẽ là văn bản thuần túy.

mutool

Ngoài ra còn có mutoolcông cụ dòng lệnh đi kèm với trình xem PDF MuPDF (là một sản phẩm chị em với Ghostscript, được sản xuất bởi cùng một công ty, Artifex ). Lệnh sau cũng giải nén các luồng và giúp kiểm tra chúng dễ dàng hơn thông qua trình soạn thảo văn bản:

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

podofouncompress

PoDoFo là một thư viện FreeSoftware / OpenSource để làm việc với định dạng PDF và nó bao gồm một số công cụ dòng lệnh, bao gồmpodofouncompress. Sử dụng nó như thế này để giải nén các luồng PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF là một công cụ dựa trên Python giúp bạn khám phá các tệp PDF. Mục đích ban đầu của nó là để nghiên cứu và mổ xẻ phần mềm độc hại dựa trên PDF, nhưng tôi thấy nó cũng hữu ích để điều tra cấu trúc của các tệp PDF hoàn toàn lành tính.

Nó có thể được sử dụng tương tác để "duyệt" các đối tượng và luồng có trong PDF.

Tôi sẽ không đưa ra một ví dụ sử dụng ở đây mà chỉ đưa ra một liên kết đến tài liệu của nó:

pdfid.pypdf-parser.py

pdfid.pypdf-parser.pylà hai công cụ PDF của Didier Stevens được viết bằng Python.

Nền tảng của chúng cũng là để giúp khám phá các tệp PDF độc hại - nhưng tôi cũng thấy hữu ích khi phân tích cấu trúc và nội dung của các tệp PDF lành tính.

Đây là một ví dụ cách tôi trích xuất luồng không nén của đối tượng PDF không. 5 vào tệp * .dump:

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

Ghi chú cuối cùng

  1. Xin lưu ý rằng một số phần nhị phân bên trong PDF không nhất thiết phải không nén được (hoặc có thể giải mã thành mã ASCII có thể đọc được của con người), vì chúng được nhúng và sử dụng ở định dạng gốc bên trong các tệp PDF. Các phần PDF như vậy là hình ảnh JPEG, phông chữ hoặc cấu hình màu ICC.

  2. Nếu bạn so sánh các công cụ trên và các ví dụ dòng lệnh được đưa ra, bạn sẽ phát hiện ra rằng chúng KHÔNG tạo ra tất cả các đầu ra giống nhau. Bản thân nỗ lực so sánh chúng để tìm ra sự khác biệt có thể giúp bạn hiểu rõ hơn về bản chất của cú pháp và định dạng tệp PDF.


42

Tôi sử dụng iText RUPS (Cú pháp đọc và cập nhật PDF) trong Linux. Vì nó được viết bằng Java nên nó cũng hoạt động trên Windows. Bạn có thể duyệt tất cả các đối tượng trong tệp PDF trong cấu trúc dạng cây. Nó cũng có thể giải mã các luồng được mã hóa Flate một cách nhanh chóng để giúp việc kiểm tra dễ dàng hơn.

Đây là ảnh chụp màn hình:

Ảnh chụp màn hình iText RUPS


9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Làm thế nào bạn phải chạy cái này? Chỉnh sửa: Đã tìm ra. Bạn không nên tải xuống tệp mặc định do SourceForge cung cấp, bạn cần tải xuống .jar bao gồm các tệp phụ thuộc.
Zero3,

2
@ Zero3 vừa gặp phải điều tương tự. Cám ơn bạn đã góp ý.
Sam,

1
@KurtPfeifle Tôi hoàn toàn đồng ý. Thật không may, rất nhiều phần mềm (như thế này!) Chỉ có sẵn thông qua SourceForge vì người bảo trì chưa chuyển dự án đi nơi khác và có thể không bao giờ làm như vậy. Bạn thực sự nên rất cẩn thận khi tải xuống bất kỳ thứ gì từ SourceForge những ngày này ...
Zero3,

6
Có - dưới dạng một jar đã biên dịch và thậm chí là một exe, dành cho người dùng Windows. Xem github.com/itext/rups/releases/latest
Amedee Van Gasse

1
@AmedeeVanGasse ảnh chụp màn hình trong câu trả lời này hiển thị chế độ xem của trang (giữa cây tài liệu và tab xref). Làm cách nào để hiển thị dạng xem đó trong v5.5.9 trên Windows?
iPDFdev


5

Tôi đã sử dụng PDFBox thành công tốt đẹp. Dưới đây là một ví dụ về mã trông như thế nào (trở lại từ phiên bản 0.7.2), có thể đến từ một trong các ví dụ được cung cấp:

// 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

Ngoài ra còn có một lựa chọn khác. Adobe Acrobat Pro cũng có thể hiển thị cấu trúc cây bên trong của PDF.

  1. Mở Preflight
  2. Đi tới Tùy chọn (góc trên bên phải)
  3. Cấu trúc PDF nội bộ

Trên đầu trang Adobe Acrobat Pro cũng có thể hiển thị cấu trúc bên trong của Phông chữ Tài liệu trong PDF mà hầu hết các "trình xem cấu trúc cây PDF" khác không có ý tưởng này

nhập mô tả hình ảnh ở đây


2
Đây là những gì @ mark-stephens mô tả trong câu trả lời được chấp nhận.
koppor

3
Câu trả lời của @ mark-stephens chỉ là các liên kết đến một bài đăng trên blog có thể biến mất trong tương lai (và không được khuyến khích trên SO). vadimo thực sự cung cấp câu trả lời.
Starfish

1

Nếu bạn muốn làm việc theo chương trình từ bên trong Python, pdfminer là một lựa chọn tốt. Nó cho phép bạn làm việc với cấu trúc PDF trong bộ nhớ như một cấu trúc phân cấp đối tượng hoặc tuần tự hóa nó dưới dạng XML.



-6

Sugession của tôi là Foxit PDF Reader , rất hữu ích để thực hiện công việc chỉnh sửa văn bản quan trọng trên tệp pdf.


6
Tôi không thể tìm thấy bất kỳ cách nào trong Foxit Reader để xem cấu trúc bên trong của một PDF tương tự như PDF Inspector (tham chiếu trong câu hỏi)
bmaupin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.