- diff-pdf เป็นเครื่องมือสำหรับเปรียบเทียบไฟล์ PDF สองไฟล์แบบมองเห็นได้ โดยเมื่อรันตามค่าเริ่มต้น หากไม่มีความแตกต่างจะคืน exit code 0 และหากมีความแตกต่างจะคืน 1
- เมื่อใช้ตัวเลือก
--output-diff จะสามารถสร้าง PDF ที่ไฮไลต์ความแตกต่างแบบมองเห็นได้
- ตัวเลือก
--view จะเปิด หน้าจอเปรียบเทียบแบบ GUI อย่างง่าย เพื่อดูหน้าและซูมได้ และสามารถใช้ลูกศร Ctrl/Cmd เพื่อเลื่อนตำแหน่งสัมพัทธ์ของสองหน้าได้
- มีแพ็กเกจที่คอมไพล์ไว้ล่วงหน้าหรือช่องทางติดตั้งผ่าน package manager สำหรับ Windows, macOS, Fedora, CentOS 8 และ openSUSE
- รีโพซิทอรีนี้ให้ใช้งานแบบ as-is และไม่ได้อยู่ระหว่างการพัฒนาอย่างแข็งขัน จึงคาดหวังการรองรับคำขอฟีเจอร์หรือการแก้ไขได้ยาก โดยรับการปรับปรุงในรูปแบบ pull request
diff-pdf ทำอะไร
- diff-pdf รับไฟล์ PDF สองไฟล์เป็นอาร์กิวเมนต์แล้วเปรียบเทียบแบบมองเห็นได้
- เอาต์พุตตามค่าเริ่มต้นมีเพียง exit code
- หากไม่มีความแตกต่างจะเป็น
0
- หาก PDF สองไฟล์แตกต่างกันจะเป็น
1
- หากต้องการสร้าง PDF ที่ไฮไลต์ความแตกต่าง ให้ใช้ตัวเลือก
--output-diff
$ diff-pdf --output-diff=diff.pdf a.pdf b.pdf
โหมดเปรียบเทียบแบบ GUI
- เมื่อใช้ตัวเลือก
--view จะสามารถเปรียบเทียบไฟล์สองไฟล์ใน GUI อย่างง่ายได้
$ diff-pdf --view a.pdf b.pdf
- ในหน้าต่าง GUI สามารถดูหน้า PDF และซูมดูรายละเอียดได้
- ใช้ลูกศร Ctrl หรือบน macOS ใช้ลูกศร Cmd เพื่อเลื่อนตำแหน่งสัมพัทธ์ของสองหน้าได้
- มีประโยชน์ในการตรวจสอบความแตกต่างที่เกิดจากตำแหน่งเปลี่ยนไปเท่านั้น
- ใช้
Ctrl+<, Ctrl+> เพื่อดูเอกสารฝั่งซ้ายและฝั่งขวาตามลำดับได้
- บน macOS ใช้
Cmd+<, Cmd+>
- ใช้
Ctrl+D เพื่อกลับไปยังมุมมอง diff ได้
- ดูรายการตัวเลือกทั้งหมดได้จาก
$ diff-pdf --help
การติดตั้งไบนารี
- เวอร์ชันที่คอมไพล์ไว้ล่วงหน้าสำหรับ Windows มีให้ในรูปแบบ ZIP archive ของ latest release
- สามารถรันได้จากทุกตำแหน่งที่แตกไฟล์ไว้
- หากใช้ Chocolatey บน Windows ให้ติดตั้งด้วยคำสั่งต่อไปนี้
$ choco install diff-pdf
- หากใช้ Homebrew บน macOS ให้ติดตั้งด้วยคำสั่งต่อไปนี้
$ brew install diff-pdf
- หากใช้ MacPorts บน macOS ให้ติดตั้งด้วยคำสั่งต่อไปนี้
$ port install diff-pdf
- บน Fedora และ CentOS 8 ให้ติดตั้งด้วยคำสั่งต่อไปนี้
$ sudo dnf install diff-pdf
การบิลด์จากซอร์ส
- ระบบบิลด์ใช้ Automake จึงต้องมีสภาพแวดล้อม Unix หรือคล้าย Unix เช่น Cygwin/MSYS
- ขั้นตอนบิลด์ทั่วไปมีดังนี้
$ ./bootstrap
$ ./configure
$ make
$ make install
./bootstrap จำเป็นเฉพาะเมื่อบิลด์ซอร์สที่ checkout มาจากระบบควบคุมเวอร์ชัน กล่าวคือเมื่อไม่มี configure และ Makefile.in
- ไลบรารีที่ต้องใช้มีดังนี้
wxWidgets >= 3.0
Cairo >= 1.4
Poppler >= 0.10
Dependencies ตามแพลตฟอร์ม
- บน CentOS ให้ติดตั้งเครื่องมือพัฒนาและแพ็กเกจที่เกี่ยวข้องกับ wxGTK, Poppler GLib
$ sudo yum groupinstall "Development Tools"
$ sudo yum install wxGTK wxGTK-devel poppler-glib poppler-glib-devel
- บน Ubuntu 24.04 / Debian 12 ขึ้นไป ให้ใช้
libwxgtk3.2-dev
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.2-dev
- บน Ubuntu / Debian รุ่นเก่า ให้ใช้
libwxgtk3.0-gtk3-dev
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.0-gtk3-dev
- บน macOS ให้ติดตั้ง Xcode Command Line Tools แล้วจัดการ dependencies ด้วย Homebrew หรือ MacPorts
$ xcode-select --install
$ brew install automake autoconf wxmac poppler cairo pkg-config
$ sudo port install automake autoconf wxWidgets-3.0 poppler cairo pkgconfig
- บน Windows ต้องใช้ dependencies เพิ่มเติมมากกว่าเดิม เพราะไม่ได้มีไลบรารีที่ Cairo และ Poppler ใช้มาให้โดยค่าเริ่มต้น
- รวมถึง fontconfig, freetype, glib, libpng, pixman, gettext, libiconv, libjpeg, zlib เป็นต้น
การบิลด์บน Windows ด้วย MSYS + MinGW
- การบิลด์บน Windows ต้องใช้ สภาพแวดล้อม MSYS2 และการติดตั้ง MinGW ที่มี C++ compiler
- ใน MSYS2 MinGW shell ให้ย้ายไปยังไดเรกทอรีซอร์สของ diff-pdf
- ติดตั้งคอมโพเนนต์ MSYS เพิ่มเติม
$ pacman -Syu
$ pacman -S automake autoconf pkg-config make zip pactoys
$ pacboy -S gcc:p poppler:p wxWidgets:p
- จากนั้นบิลด์ตามขั้นตอน Unix ได้เหมือนกัน
$ ./bootstrap # จำเป็นเฉพาะเมื่อบิลด์จาก git repository
$ ./configure
$ make
- หากต้องการสร้าง ZIP archive ที่รวม DLL ที่จำเป็น ให้รันคำสั่งต่อไปนี้
$ make windows-dist
สถานะการติดตั้งและการบำรุงรักษา
- บน Unix ให้ติดตั้งด้วย
make install ตามปกติ
- บน Windows ไม่จำเป็นต้องติดตั้งแยก เพียงคัดลอกไฟล์ไปยังตำแหน่งที่ต้องการ
- หากบิลด์ตามขั้นตอนข้างต้น ไฟล์ที่จำเป็นจะอยู่ใน ZIP archive ที่สร้างขึ้น
- รีโพซิทอรีนี้ให้ใช้งานแบบ as-is และโค้ดไม่ได้อยู่ระหว่างการพัฒนาอย่างแข็งขัน
- หากต้องการปรับปรุง แนะนำให้แก้ไขเองแล้วส่ง pull request
- คาดหวังการสนับสนุน เช่น การทำตามคำขอฟีเจอร์หรือการแก้ไข ได้ยาก
1 ความคิดเห็น
ความเห็นจาก Hacker News
ให้ Claude 3.5 Sonnet ใช้ PDF.js เพื่อเรนเดอร์ PDF ลงบนแคนวาส และสร้างเว็บต้นแบบอย่างรวดเร็วที่แสดงความแตกต่างเชิงภาพของแต่ละหน้า
พรอมป์ต์มีอยู่สองอัน: อันแรกให้รับ PDF สองไฟล์ด้วยการลากแล้ววาง แสดงหน้าแบบวางเคียงกัน และถ้ามีความต่างให้เน้นด้วยภาพที่สาม ส่วนอีกอันคือให้เขียนใหม่โดยไม่ใช้ React เลย
ผลลัพธ์: https://tools.simonwillison.net/compare-pdfs
ใช้งานได้ดีทีเดียว ภาพหน้าจอ: https://gist.github.com/simonw/9d7cbe02d448812f48070e7de13a5...
ผมหาความต่างจริง ๆ ไม่เจอ และบางทีอาจเป็นผมเองที่หลอนเห็นไปก็ได้
ที่ทำงานเก่าเคยต้องตรวจสอบผลลัพธ์จากระบบจัดพิมพ์สำหรับงาน production ที่ไม่เสถียร เลยทดสอบเครื่องมือเปรียบเทียบ PDF ที่หาใช้ได้ในตอนนั้นเป็นสิบ ๆ ตัว ตัวที่ดีที่สุดคือ Delta Walker ซึ่งเป็นซอฟต์แวร์เชิงพาณิชย์แบบ proprietary สำหรับ Mac เท่านั้นในเวลานั้น แต่ราคาสมเหตุสมผล แม่นยำ และจัดการ PDF ยาว ๆ ที่มีกราฟิกเยอะได้ดี
เครื่องมือ diff-pdf นี้ก็เคยประเมินด้วย มันยังขาดในบางด้าน แต่เวลาผ่านมานานมากจนจำรายละเอียดไม่ได้ ส่วนใหญ่เครื่องมืออื่น ๆ มักพลาดการเปลี่ยนแปลงหรือแจ้งเตือนเกินจริง และเพราะตัวนี้เป็นโอเพนซอร์สจึงยิ่งน่าเสียดายที่เอามาทำสคริปต์ได้ง่าย
เผื่อจะเป็นประโยชน์กับใครบางคน ใน ImageMagick สามารถทำการเปรียบเทียบ PDF แบบเห็นภาพได้
magick compare -density "$DENSITY" -background white "$1[0]" "$2[0]" "$TMP"โดย density คือ 100,
$1และ$2คือชื่อไฟล์ที่จะเปรียบเทียบ และ$TMPคือไฟล์ผลลัพธ์ ถ้าจะรองรับหลายหน้าต้องทำเพิ่มอีกหน่อย เลยใช้สคริปต์นี้: https://gist.github.com/mbafford/7e6f3bef20fc220f68e467589bb...สคริปต์นี้ยังใช้
imgcatเพื่อแสดงความต่างในเทอร์มินัลได้ทันทีด้วย นอกจากนี้ยังสามารถใช้ ImageMagick เพื่อหาค่า ความต่างของ perceptual hash ได้ด้วยวิธีอย่างconvert -metric phash "$1" null: "$2" -compose Difference -layers composite -format '%[fx:mean]\n' info:โดยอาศัยความจริงที่ว่า git ตั้งค่าเครื่องมือ diff แบบกำหนดเองได้ จึงใส่
[diff "pdf"] command = ~/bin/git-diff-pdfไว้ใน.gitconfigและตั้ง*.pdf binary diff=pdfใน.gitattributes~/bin/git-diff-pdfจะรันทั้ง diff ของผลลัพธ์pdftotext -layoutจาก poppler และpdf-compare-phashร่วมกันหากต้องการใช้ custom diff นี้กับ
git showต้องเพิ่มอาร์กิวเมนต์อย่างgit show --ext-diffแต่ในgit diffจะถูกใช้โดยอัตโนมัติใช้สิ่งนี้ใน CI pipeline มานานเพื่อดูแล แอปสร้าง PDF ที่เป็นหัวใจสำคัญทางธุรกิจในวงการการแพทย์ แอปนี้เริ่มมาตั้งแต่ราวปี 2010 และ RSpec helper ที่ใช้อยู่มีอยู่ที่นี่: https://gist.github.com/thbar/d1ce2afef68bf6089aeae8d9ddc05d...
ในโค้ดจะมี PDF ต้นแบบที่เก็บไว้ใน git และ test suite จะสร้างมันขึ้นมาใหม่เพื่อตรวจสอบว่าไม่มีอะไรเปลี่ยนไป
มันช่วยได้มากในการตรวจสอบการเปลี่ยนแปลงเชิงภาพหรือการอัปเกรดไลบรารี PDF
ทำให้นึกถึงเครื่องมือที่ Bob Nystrom สร้างขึ้นเพื่อช่วยตัวเองตอนทำหนังสือ Crafting Interpreters ฉบับตีพิมพ์จริง: https://journal.stuffwithstuff.com/2020/04/05/crafting-craft...
บทความทั้งหมดน่าอ่าน แต่ถ้าอยากดูเฉพาะส่วนที่เกี่ยวข้อง ให้ค้นหาคำว่า “I wrote a Dart script that would take a PDF of the book”
ที่ Micro:bit Educational Foundation (microbit.org) ใช้เครื่องมือนี้เพื่ออุดช่องว่างของเครื่องมือออกแบบฮาร์ดแวร์ และใช้ตรวจสอบ ความต่างเชิงภาพของ schematic และไฟล์ Gerber ในระหว่างการทำซ้ำของงานออกแบบ PCB
สุดท้ายแล้วการใช้งานแบบนี้อาจดูเฉพาะทางอยู่บ้าง แต่ถ้าคุณอยากมั่นใจจริง ๆ ว่าการแก้ไขเล็กน้อยในส่วนอื่นของบอร์ดไม่ได้ทำให้เลย์เอาต์วงจรไร้สายเปลี่ยนไปเลย การทำ visual diff ก็ตอบโจทย์มาก
อย่างไรก็ตาม ในโปรเจกต์ถัดไปอยากลองวิธีที่ผสานเข้ากับเครื่องมือ EDA มากกว่านี้ ถ้าใครเคยเดินเส้นทางคล้ายกันมาก่อนก็อยากรู้เหมือนกัน
ทำได้ด้วย Beyond Compare เช่นกัน ไม่ฟรีแต่ก็ไม่ได้แพงมาก: https://www.scootersoftware.com/
ชอบเครื่องมือนี้มากกว่า: https://www.qtrac.eu/diffpdf.html
มันให้ เปรียบเทียบแบบวางข้างกัน ใน GUI แทนการซ้อนทับความแตกต่างให้ดู
--viewก็สามารถเปรียบเทียบไฟล์สองไฟล์แบบเห็นภาพใน GUI อย่างง่ายได้$ diff-pdf --view a.pdf b.pdfหน้าต่างจะเปิดขึ้นและสามารถดูแต่ละหน้าของไฟล์ได้ พร้อมซูมดูรายละเอียดได้ นอกจากนี้ยังเลื่อนตำแหน่งสัมพัทธ์ของสองหน้าได้ด้วย Ctrl+ลูกศร หรือบน MacOS ใช้ Cmd+ลูกศร จึงมีประโยชน์ในการหาความต่างที่เกิดจากการเลื่อนตำแหน่งเพียงอย่างเดียว
บน Fedora สามารถติดตั้งได้ด้วยแพ็กเกจ
diffpdfตอนนี้ไม่ได้รับการดูแลต่อแล้ว แต่ยังทำงานได้ดีมาก และรองรับทั้ง GUI แบบมองข้างกัน, drag and drop, โหมดข้อความ และโหมดภาพในทีม เราใช้เครื่องมือนี้เป็นประจำเมื่อต้องเปรียบเทียบ PDF ของบริการภายนอก ที่อาจเปลี่ยนไปหลังจากมีการแก้โค้ดฝั่งเรา
ที่น่าสนใจคือ GitHub จัดโปรเจ็กต์นี้ว่าเป็น shell 46% เพราะ
wxwin.m4ที่ค่อนข้างใหญ่