เครื่องมือในการเปรียบเทียบไฟล์ PDF จำนวนมาก? [ปิด]


84

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

  • การแบ่งส่วนข้อความอาจแตกต่างกัน
  • ลำดับการเขียนอาจแตกต่างกัน
  • ตำแหน่งอาจแตกต่างกันบางพิกเซล

ควรเปรียบเทียบเนื้อหาเหมือนมนุษย์ไม่ใช่โครงสร้างภายใน ฉันต้องการทดสอบการถดถอยระหว่างตัวสร้าง PDF เวอร์ชันต่างๆที่เราใช้


3
คำตอบบางส่วนคือการใช้pdftotextและเปรียบเทียบข้อความที่มีอยู่
Sklivvz

แต่สิ่งนี้จะไม่สนใจข้อมูลที่ไม่ใช่ข้อความทั้งหมดเช่นเส้นกล่องรูปภาพแผนภูมิ ฯลฯ ฉันคิดว่ามันจะไม่แสดงตำแหน่งออปติคอลของข้อความอื่นในตำแหน่งโครงสร้าง
Horcrux7

ฉันยอมรับมันไม่ใช่เกณฑ์ที่เพียงพอ ในทางกลับกันมันเป็นเกณฑ์ที่จำเป็นดังนั้นจึงเพียงพอสำหรับการทดสอบหน่วย
Sklivvz

ไม่เคยอยู่ในสถานการณ์ของคุณมาก่อน แต่ฉันได้ลองใช้ExamDiff Proเพื่อเปรียบเทียบ PDF และมันก็ใช้ได้ผลสำหรับฉัน
cubex

คุณสามารถเพิ่มการทดสอบหน่วยที่ดีกว่าได้ในภายหลัง!
Sklivvz

คำตอบ:


39

เนื่องจากไม่มีเครื่องมือดังกล่าวที่เราเขียนขึ้นมา คุณสามารถดาวน์โหลดi-net PDF content Comparerและใช้งานได้ ฉันหวังว่าจะช่วยคนอื่น ๆ ที่มีปัญหาเดียวกัน หากคุณมีปัญหาหรือมีข้อเสนอแนะสำหรับเราคุณสามารถติดต่อฝ่ายสนับสนุนของเรา

ใส่คำอธิบายภาพที่นี่


ข้อดีของเครื่องมือนี้คือไม่ใช่ทั้งตัวเปรียบเทียบข้อความล้วน ๆ หรือตัวเปรียบเทียบรูปภาพ โดยจะเปรียบเทียบตามโครงสร้างตรวจสอบว่าองค์ประกอบที่มี "เหมือนกัน" หรือไม่ดังนั้น PDF ที่เปรียบเทียบของคุณไม่จำเป็นต้องตรงกัน 100% แต่ต้องอยู่ในความคล้ายคลึงกันที่ชัดเจน และฟรี
gamma

ฉันขอแนะนำสิ่งนี้ด้วย! เอกสารมันขัดข้องผมเลยส่งไปให้ พวกเขาแก้ไขมัน! : DI รู้สึกดีมาก มันสามารถสร้างภาพที่มีความแตกต่างหรือสามารถให้รายงานที่เป็นข้อความแก่คุณในคอนโซล
Janus Troelsen

4
@gamma แอปพลิเคชั่นนั้นฟรีที่ไหน? มีค่าใช้จ่ายอย่างน้อย 200 USD ต่อปี (!) ฟรีเพียงครั้งเดียวเป็นเวลา 30 วัน นั่นเป็นวิธีที่แพงเกินไปสำหรับสิ่งที่ฉันจะทำกับมัน
ygoe

@LonelyPixel ใช่คุณพูดถูก เวอร์ชัน 1.0 เป็นเวอร์ชันฟรี (ตั้งแต่ 2010-10-14) เราได้เปลี่ยนแปลงไปเล็กน้อยและตอนนี้เป็นเครื่องมือแบบชำระเงิน (2012-10) อย่างไรก็ตามคุณสามารถทดลองใช้งานได้ 30 วันโดยไม่มีข้อ จำกัด ใด ๆ ได้รับคุณสมบัติใหม่ ๆ ความเสถียรและความน่าเชื่อถือมากมาย ฉันหวังว่าคุณจะยังคงได้ดู;)
gamma

ฉันต้องเปรียบเทียบไฟล์ pdf ด้วยเช่นกัน - ฉันได้สร้าง jar โดยใช้ apache pdfbox ตรวจสอบที่นี่testautomationguru.com/…ตัวอย่าง & ดาวน์โหลด
ชนะ

21

มีเครื่องมือ diffpdf จริงๆ

http://www.qtrac.eu/diffpdf.html

จุดอ่อนของมันคือมันไม่ตอบสนองได้ดีเมื่อการเพิ่มทำให้ข้อความใหม่บางส่วนเลื่อนไปที่หน้าใหม่ ตัวอย่างเช่นหากควรเปรียบเทียบหน้าเก่า 4 กับตอนท้ายของหน้า 5 และตอนต้นของหน้า 6 คุณจะต้องเปลี่ยนพารามิเตอร์เพื่อเปรียบเทียบทั้งสองส่วนแยกกัน


1
เวอร์ชันโอเพนซอร์สดั้งเดิมยังคงมีอยู่ที่qtrac.eu/diffpdf-foss.html
Tobias Kienzler

13

ฉันเคยใช้สคริปต์แบบโฮมเมดซึ่ง

  • แปลงหน้าทั้งหมดในสอง PDF เป็นบิตแมป
  • หน้าสีของ PDF 1 เป็นสีแดงบนสีขาว
  • เปลี่ยนเป็นสีขาวเป็นโปร่งใสในหน้า PDF 2
  • ซ้อนทับแต่ละหน้าจาก PDF 2 ที่ด้านบนของหน้าที่เกี่ยวข้องจาก PDF 1
  • เรียกใช้การแปลง / ระบายสีและการซ้อนทับแบบขนานบนหลายคอร์

ซอฟต์แวร์ที่ใช้:

  • GhostScript สำหรับการแปลง PDF เป็นบิตแมป
  • ImageMagick สำหรับการระบายสีความโปร่งใสและการซ้อนทับ
  • inotify สำหรับการซิงโครไนซ์กระบวนการแบบขนาน
  • โปรแกรมดูรูปภาพที่รองรับ PNG สำหรับตรวจสอบผลลัพธ์

ข้อดี:

  • ใช้งานง่าย
  • เครื่องมือทั้งหมดที่ใช้เป็นโอเพ่นซอร์ส
  • เหมาะสำหรับการค้นหาความแตกต่างเล็กน้อยในการจัดวาง

จุดด้อย:

  • การแปลงช้า
  • ความแตกต่างที่สำคัญระหว่าง PDF (เช่นการแบ่งหน้า) ทำให้เกิดความยุ่งเหยิง
  • บิตแมปไม่สามารถซูมได้
  • ใช้ได้ดีกับข้อความและไดอะแกรมขาวดำเท่านั้น
  • ไม่มี GUI ที่ใช้งานง่าย

ฉันกำลังมองหาเครื่องมือที่จะทำเช่นเดียวกันในระดับ PDF / PostScript

นี่คือวิธีที่สคริปต์ของเราเรียกใช้ยูทิลิตี้ (โปรดทราบว่า ImageMagick ใช้ GhostScript เบื้องหลังเพื่อทำการแปลง PDF-> PNG):

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png
$ composite front01.png back01.png result01.png # do this for all pairs of images

1
ทำไมไม่แชร์สคริปต์ทั้งหมด
Janus Troelsen

1
นี่คือสิ่งที่ฉันใช้ในการfor i in $(seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1-$i.png 2-$i.png result-$i.png; done
เรียบเรียง

นี่คือสคริปต์ที่ไม่ได้เขียนไฟล์ชั่วคราวไปยังดิสก์และใช้ pdftoppm Poppler ซึ่งจะเร็วกว่า Ghostscript A: gist.github.com/brechtm/891de9f72516c1b2cbc1 จะแสดง JPG หนึ่งไฟล์สำหรับแต่ละหน้าของ PDF ในpdfdiffไดเร็กทอรีและยังพิมพ์ตัวเลขของหน้าที่แตกต่างกันระหว่าง PDF ทั้งสอง
Brecht Machiels

12

ดูเหมือนว่าฉันจะไม่เห็นสิ่งนี้ที่นี่ดังนั้นนี่คือ: ผ่านsuperuser: จะเปรียบเทียบความแตกต่างระหว่างไฟล์ PDF สองไฟล์ได้อย่างไร (ตอบ # 229891 โดย @slestak)มี

https://github.com/vslavik/diff-pdf

(สร้างขั้นตอนสำหรับ Ubuntu Natty ได้ในget-diff-pdf.sh )

เท่าที่ฉันเห็นโดยทั่วไปแล้วมันจะซ้อนทับข้อความ / กราฟิกของแต่ละหน้าใน pdf (s) ทำให้คุณสามารถดูได้อย่างง่ายดายว่ามีการเปลี่ยนแปลงใด ๆ ...

ไชโย!


9

เรายังใช้pdftotext (ดูคำตอบของSklivvz ) เพื่อสร้างไฟล์ PDF และwdiffเวอร์ชัน ASCIIเพื่อเปรียบเทียบ

ใช้-layoutสวิตช์ของ pdftotext เพื่อเพิ่มความสามารถในการอ่านและรับแนวคิดเกี่ยวกับการเปลี่ยนแปลงในเค้าโครง

ในการรับเอาต์พุตสีที่สวยงามจาก wdiff ให้ใช้สคริปต์ wrapper นี้:

#!/bin/sh
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2

4

ฉันคิดว่าแนวทางที่ดีที่สุดของคุณคือการแปลง PDF เป็นรูปภาพด้วยความละเอียดที่เหมาะสมและมากกว่าการเปรียบเทียบรูปภาพ

เพื่อสร้างภาพจากไฟล์ PDF คุณสามารถใช้ห้องสมุดของ Adobe PDF หรือวิธีการแก้ปัญหาที่วิธีที่ดีที่สุดที่จะไฟล์ PDF แปลงไฟล์

ในการเปรียบเทียบไฟล์ TIFF ที่สร้างขึ้นฉันพบว่า GNU tiffcmp (สำหรับส่วน windows ของGnuWin32 tiff ) และtiffinfoทำได้ดี ใช้ tiffcmp -l และนับจำนวนบรรทัดของเอาต์พุตเพื่อค้นหาความแตกต่าง หากคุณพอใจที่จะมีการเปลี่ยนแปลงเนื้อหาเล็กน้อย (เช่นความแตกต่างของการลบรอยหยัก) ให้ใช้ tiffinfo เพื่อนับจำนวนพิกเซลทั้งหมดจากนั้นคุณสามารถสร้างค่าความแตกต่างเป็นเปอร์เซ็นต์ได้

อย่างไรก็ตามสำหรับทุกคนที่ทำการเปรียบเทียบ PDF อย่างง่ายโดยที่โครงสร้างไม่ได้เปลี่ยนแปลงเป็นไปได้ที่จะใช้ command line diff และละเว้นรูปแบบบางอย่างเช่น GNU diff 2.7:

diff --brief -I xap: -I xapMM: -I / CreationDate -I / BaseFont -I / ID - ไบนารี - ข้อความ

สิ่งนี้ยังคงมีปัญหาที่ไม่สามารถตรวจจับการเปลี่ยนแปลงในชื่อแบบอักษรที่สร้างขึ้นได้เสมอไป


ฉันคิดว่าการเปรียบเทียบภาพ 2 ภาพนั้นซับซ้อนกว่าเมื่อเปรียบเทียบไฟล์ PDF ด้วยตัวเอง
Horcrux7

การเปรียบเทียบภาพสามารถทำได้ด้วย GnuWin32 tiffcmp ฉันจะอัปเดตคำตอบของฉันเพื่ออธิบายรายละเอียดเกี่ยวกับเรื่องนี้
danio

1

ผลิตภัณฑ์ของเราตัวเปรียบเทียบ PDF - http://www.premediasystems.com/pdfc.html "- จะทำสิ่งนี้ได้อย่างหรูหราและมีประสิทธิภาพนอกจากนี้ยังไม่ฟรีและเป็นแอปพลิเคชันเฉพาะสำหรับ Mac OS X


เครื่องมือนี้เปรียบเทียบพิกเซลต่อพิกเซล นี่เป็นเรื่องง่ายมาก คำถามคือการเปรียบเทียบเหมือนคนทั่วไป
Horcrux7

1
@ Horcrux7: แต่จะมีวิธีอื่นนอกเหนือจากการเปรียบเทียบ 'พิกเซลต่อพิกเซล' ดวงตาของมนุษย์จะเปรียบเทียบหน้าต่างๆที่มีลักษณะคล้ายกันได้อย่างไร!?
Kurt Pfeifle

@KurtPfeifle - ฉันรู้ว่านี่เป็นความคิดเห็นเก่า ... แต่มนุษย์ไม่ได้เปรียบเทียบภาพแบบพิกเซลต่อพิกเซล วิธีที่มนุษย์เปรียบเทียบความแตกต่างในภาพนั้นค่อนข้างซับซ้อน แต่ต้องอาศัยการจดจำรูปแบบและการวิเคราะห์พฤติกรรม
CBRF23

@ CBRF23: จริงและฉันก็รู้ - แต่การวิเคราะห์พฤติกรรมทั้งหมดนี้ในตอนท้ายยังคงมีรากฐานมาจากการเปรียบเทียบแบบ "พิกเซลต่อพิกเซล" สำหรับบางคนอื่น ๆ การวิเคราะห์พฤติกรรมระดับที่สูงขึ้นการดำเนินการกับ ImageMagickดูบางคำตอบอื่น ๆ ของฉัน: อย่างใดอย่างหนึ่ง - สอง - สาม
Kurt Pfeifle

@ CBRF23: ... และโปสเตอร์ต้นฉบับ (ที่) Hocrux7 พูดถึง "พิกเซล" ในคำถามของเขาและไม่ต้องการ "โครงสร้างภายใน" ของไฟล์ที่เปรียบเทียบอย่างชัดเจน (แม้ว่าความคิดเห็นของเขาที่นี่จะขัดแย้งอีกครั้งก็ตาม)
Kurt Pfeifle

1

ตามความต้องการของคุณโซลูชันการแปลงเป็นข้อความจะเป็นวิธีที่ง่ายและตรงที่สุด ฉันคิดว่าแนวคิดบิตแมปค่อนข้างเจ๋ง



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.