เครื่องมือที่ดีที่สุดสำหรับการตรวจสอบไฟล์ PDF? [ปิด]


94

ฉันจะตรวจสอบไฟล์ PDF โดยใช้เครื่องมือได้อย่างไร

กรณีการใช้งาน: ฉันกำลังพยายามสร้างไฟล์ PDF โดยใช้โปรแกรม (โดยใช้ iText) ฉันประสบปัญหาในการสร้างเลย์เอาต์บางอย่าง แต่ฉันมีไฟล์ PDF ที่มีข้อความในแบบที่ฉันต้องการ (สร้างจาก Word) ฉันต้องการทำวิศวกรรมย้อนกลับว่าพวกเขาทำอย่างไร

PDF Inspectorดูเหมือนจะดี แต่ฉันกำลังมองหาบางอย่างสำหรับ Windows


PDF Inspector ใช้ Java จึงมีหลายแพลตฟอร์ม
david.perez

2
ดูเหมือนจะไม่ทำงานบน Windows โถไม่ทำอะไรเลยเมื่อคลิก เมื่อถูกเรียกที่บรรทัดคำสั่งฉันจะได้รับno main manifest attribute, in PDF Document Inspector.jar
ทอม

1
@ david.perez มันขึ้นอยู่กับ java แต่ห่อแอปเปิ้ลดังนั้นจึงเป็นการแจกจ่ายแอปเปิ้ลเท่านั้น มี jar "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar" แต่ไม่สามารถเริ่มต้นได้เป็น java -jar "PDF Document Inspector.jar" นอกจากนี้ยังมี com.apple.cocoa อีกมากมาย * รวมถึง ที่เป็นแพลตฟอร์มเฉพาะ :(
andrej

ตอนนี้ฉันใช้ iText Rups สำเร็จหลายแพลตฟอร์มและ Java
david.perez

คำตอบ:


18

Adobe Acrobat มีโหมดที่เจ๋งมาก แต่ซ่อนไว้ค่อนข้างดีให้คุณตรวจสอบไฟล์ PDF ฉันเขียนบทความบล็อกอธิบายไว้ที่https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/


ดูเหมือนว่าจะต้องมีปลั๊กอิน อย่างน้อยก็ไม่มีใน Acrobat Reader 9.5.5 บน Linux
Adam Spires

3
@AdamSpiers กล่องโต้ตอบ preflight เป็นคุณลักษณะของ Adobe Acrobat ไม่ใช่ Adobe Reader
IPSUS

... และ Acrobat ( เดิมชื่อ Acrobat Exchange ) ไม่สามารถใช้ได้กับ Linux: - /
Adam Spiers

7
กล่องโต้ตอบ Preflight ต้องใช้ Adobe Acrobat Pro ไม่มีใน Adobe Acrobat Standard
Futal

1
และมันเป็นฝันร้ายของ UI ที่จะใช้งานจริง
จอน

87

นอกเหนือจากเครื่องมือที่ใช้ GUI ที่กล่าวถึงในคำตอบอื่น ๆ แล้วยังมีเครื่องมือบรรทัดคำสั่งบางอย่างที่สามารถแปลงซอร์สโค้ด PDF ดั้งเดิมให้เป็นการแสดงที่แตกต่างกันซึ่งช่วยให้คุณตรวจสอบ (ไฟล์ที่แก้ไขในขณะนี้) ด้วยโปรแกรมแก้ไขข้อความ เครื่องมือทั้งหมดด้านล่างทำงานบน Linux, Mac OS X, ระบบ Unix อื่น ๆ หรือ Windows

qpdf (ของโปรด)

ใช้qpdfเพื่อคลายการบีบอัดสตรีมของวัตถุ (ส่วนใหญ่) และแยกObjStmวัตถุออกเป็นวัตถุทางอ้อม:

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

qpdfอธิบายตัวเองเป็นเครื่องมือที่ไม่ได้"โครงสร้างการเปลี่ยนแปลงเนื้อหาที่รักษาในไฟล์ PDF"

จากนั้นเปิด + ตรวจสอบuncompressed-qpdf.pdfไฟล์ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ ไบต์ที่บีบอัดก่อนหน้านี้ส่วนใหญ่ (และด้วยเหตุนี้ไบนารี) จะเป็นข้อความธรรมดา

mutool

นอกจากนี้ยังมีmutoolเครื่องมือบรรทัดคำสั่งที่มาพร้อมกับโปรแกรมดูไฟล์ PDF MuPDF (ซึ่งเป็นผลิตภัณฑ์ในเครือของ Ghostscript ที่ผลิตโดย บริษัท เดียวกันArtifex ) คำสั่งต่อไปนี้ยังคลายการบีบอัดสตรีมและทำให้ง่ายต่อการตรวจสอบผ่านโปรแกรมแก้ไขข้อความ:

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

podofouncompress

PoDoFoเป็นไลบรารี FreeSoftware / OpenSource เพื่อทำงานกับรูปแบบ PDF และมีเครื่องมือบรรทัดคำสั่งบางอย่างรวมถึงpodofouncompressไฟล์. ใช้วิธีนี้เพื่อคลายการบีบอัดสตรีม PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDFเป็นเครื่องมือที่ใช้ Python ซึ่งช่วยให้คุณสำรวจไฟล์ PDF จุดประสงค์เดิมคือเพื่อการวิจัยและการวิเคราะห์มัลแวร์ที่ใช้ PDF แต่ฉันพบว่ามันมีประโยชน์ในการตรวจสอบโครงสร้างของไฟล์ PDF ที่ไม่เป็นอันตราย

สามารถใช้แบบโต้ตอบเพื่อ "เรียกดู" วัตถุและสตรีมที่อยู่ใน PDF

ฉันจะไม่ให้ตัวอย่างการใช้งานที่นี่ แต่เป็นเพียงลิงก์ไปยังเอกสารประกอบเท่านั้น:

pdfid.py และ pdf-parser.py

pdfid.pyและpdf-parser.pyเป็นเครื่องมือ PDFสองชุดโดย Didier Stevens ที่เขียนด้วยภาษา Python

พื้นหลังของพวกเขายังช่วยในการสำรวจPDF ที่เป็นอันตรายแต่ฉันก็พบว่ามีประโยชน์ในการวิเคราะห์โครงสร้างและเนื้อหาของไฟล์ PDF ที่ไม่เป็นพิษเป็นภัย

นี่คือตัวอย่างวิธีที่ฉันจะแยกสตรีมของวัตถุ PDF ที่ไม่มีการบีบอัด 5 ลงในไฟล์ * .dump:

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

หมายเหตุสุดท้าย

  1. โปรดทราบว่าส่วนไบนารีบางส่วนใน PDF นั้นไม่จำเป็นต้องบีบอัด (หรือถอดรหัสเป็นรหัส ASCII ที่มนุษย์อ่านได้) เนื่องจากถูกฝังและใช้ในรูปแบบดั้งเดิมภายใน PDF ส่วน PDF ดังกล่าว ได้แก่ ภาพ JPEG แบบอักษรหรือโปรไฟล์สี ICC

  2. หากคุณเปรียบเทียบเครื่องมือข้างต้นกับตัวอย่างบรรทัดคำสั่งที่ระบุคุณจะพบว่าเครื่องมือเหล่านี้ไม่ได้ให้ผลลัพธ์ที่เหมือนกันทั้งหมด ความพยายามในการเปรียบเทียบความแตกต่างในตัวมันเองสามารถช่วยให้คุณเข้าใจลักษณะของไวยากรณ์ PDF และรูปแบบไฟล์ได้ดีขึ้น


42

ฉันใช้iText RUPS (การอ่านและอัปเดตไวยากรณ์ PDF) ใน Linux เนื่องจากเขียนด้วย Java จึงทำงานบน Windows ได้เช่นกัน คุณสามารถเรียกดูวัตถุทั้งหมดในไฟล์ PDF ในโครงสร้างแบบต้นไม้ นอกจากนี้ยังสามารถถอดรหัสสตรีมที่เข้ารหัส Flate ได้ทันทีเพื่อให้การตรวจสอบง่ายขึ้น

นี่คือภาพหน้าจอ:

ภาพหน้าจอ iText RUPS


9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- คุณควรจะเรียกใช้สิ่งนี้อย่างไร? แก้ไข: คิดออก คุณไม่ควรดาวน์โหลดไฟล์เริ่มต้นที่ SourceForge นำเสนอคุณต้องดาวน์โหลด. jar ซึ่งรวมถึงการอ้างอิง
Zero3

2
@ Zero3 เพิ่งเจอเรื่องเดียวกัน ขอบคุณสำหรับความคิดเห็นของคุณ
แซม

1
@KurtPfeifle ฉันเห็นด้วยอย่างยิ่ง น่าเสียดายที่ซอฟต์แวร์จำนวนมาก (เช่นนี้!) มีให้บริการผ่าน SourceForge เท่านั้นเนื่องจากผู้ดูแลไม่ได้ย้ายโครงการไปที่อื่นและอาจไม่เคยทำ คุณควรระมัดระวังอย่างมากเมื่อดาวน์โหลดอะไรจาก SourceForge ในวันนี้ ...
Zero3

7
ใช่ - เป็น jar ที่คอมไพล์แล้วและเป็น exe สำหรับผู้ใช้ Windows ดูgithub.com/itext/rups/releases/latest
Amedee Van Gasse

1
@AmedeeVanGasse ภาพหน้าจอในคำตอบนี้แสดงมุมมองของหน้า (ระหว่างโครงสร้างเอกสารและแท็บ xref) ฉันจะแสดงมุมมองนั้นใน v5.5.9 บน Windows ได้อย่างไร
iPDFdev


5

ฉันใช้PDFBoxประสบความสำเร็จดี นี่คือตัวอย่างลักษณะของโค้ด (ย้อนกลับไปจากเวอร์ชัน 0.7.2) ซึ่งน่าจะมาจากตัวอย่างที่ให้ไว้:

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

4

นอกจากนี้ยังมีอีกทางเลือกหนึ่ง Adobe Acrobat Pro ยังสามารถแสดงโครงสร้างโครงสร้างภายในของ PDF

  1. เปิด Preflight
  2. ไปที่ตัวเลือก (มุมขวาบน)
  3. โครงสร้าง PDF ภายใน

นอกจากนี้ Adobe Acrobat Pro ยังสามารถแสดงโครงสร้างภายในของแบบอักษรของเอกสารในรูปแบบ PDF "โปรแกรมดูโครงสร้างต้นไม้ PDF" อื่น ๆ ส่วนใหญ่ไม่มีสิ่งนี้

ป้อนคำอธิบายภาพที่นี่


2
นี่คือสิ่งที่ @ mark-stephens อธิบายไว้ในคำตอบที่ยอมรับ
koppor

3
คำตอบของ @ mark-stephens เพียงแค่เชื่อมโยงไปยังบล็อกโพสต์ที่อาจหายไปในอนาคต (และไม่สนับสนุน SO) vadimo ให้คำตอบจริง
Starfish



1

หากคุณต้องการทำงานโดยใช้โปรแกรมจากภายใน Python pdfminerเป็นตัวเลือกที่ดี ช่วยให้คุณสามารถทำงานกับโครงสร้าง PDF ในหน่วยความจำเป็นลำดับชั้นของวัตถุหรือจัดลำดับเป็น XML


-6

sugession ของฉันคือFoxit PDF Readerซึ่งมีประโยชน์มากในการแก้ไขข้อความที่สำคัญในไฟล์ pdf


6
ฉันไม่พบวิธีใดใน Foxit Reader เพื่อดูโครงสร้างภายในของ PDF ที่คล้ายกับ PDF Inspector (อ้างถึงในคำถาม)
bmaupin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.