- diff-pdf दो PDF फ़ाइलों की विज़ुअल तुलना करने वाला टूल है, और डिफ़ॉल्ट रूप से चलाने पर अगर कोई अंतर नहीं हो तो exit code 0, और अंतर हो तो 1 लौटाता है
--output-diff विकल्प का उपयोग करने पर विज़ुअली हाइलाइट किए गए अंतर वाला PDF बनाया जा सकता है
--view विकल्प एक सरल GUI तुलना स्क्रीन खोलता है, जहाँ पेज देखे जा सकते हैं और ज़ूम किया जा सकता है; Ctrl/Cmd एरो से दोनों पेजों की आपसी स्थिति बदली जा सकती है
- Windows, macOS, Fedora, CentOS 8, openSUSE के लिए प्रीबिल्ट पैकेज या पैकेज मैनेजर इंस्टॉलेशन पथ उपलब्ध हैं
- रिपॉज़िटरी as-is आधार पर दी गई है और इस पर सक्रिय विकास नहीं हो रहा, इसलिए feature request या fixes के लिए सहायता की उम्मीद करना कठिन है; सुधार pull request के रूप में स्वीकार किए जाते हैं
diff-pdf क्या करता है
- diff-pdf दो PDF फ़ाइलों को argument के रूप में लेकर उनकी विज़ुअल तुलना करता है
- डिफ़ॉल्ट आउटपुट केवल 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 view पर वापस लौटा जा सकता है
- सभी विकल्पों की सूची
$ diff-pdf --help में देखी जा सकती है
बाइनरी इंस्टॉलेशन
- Windows के लिए प्रीबिल्ट संस्करण latest release के ZIP archive के रूप में उपलब्ध है
- इसे unzip करने के बाद किसी भी लोकेशन से चलाया जा सकता है
- Windows पर Chocolatey का उपयोग करते हैं तो इसे इस कमांड से इंस्टॉल करें
$ choco install diff-pdf
- macOS पर Homebrew का उपयोग करते हैं तो इसे इस कमांड से इंस्टॉल करें
$ brew install diff-pdf
- macOS पर MacPorts का उपयोग करते हैं to इसे इस कमांड से इंस्टॉल करें
$ port install diff-pdf
- Fedora और CentOS 8 पर इसे इस कमांड से इंस्टॉल करें
$ sudo dnf install diff-pdf
सोर्स से बिल्ड
- बिल्ड सिस्टम Automake का उपयोग करता है, इसलिए Unix या Cygwin/MSYS जैसे Unix-समान वातावरण की आवश्यकता होती है
- सामान्य बिल्ड प्रक्रिया इस प्रकार है
$ ./bootstrap
$ ./configure
$ make
$ make install
./bootstrap केवल तब आवश्यक है जब version control system से checkout किए गए source को build कर रहे हों, यानी जब configure और Makefile.in मौजूद न हों
- आवश्यक लाइब्रेरी निम्न हैं
wxWidgets >= 3.0
Cairo >= 1.4
Poppler >= 0.10
प्लेटफ़ॉर्म-विशिष्ट dependencies
- CentOS पर development tools और 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 इंस्टॉल करने के बाद Homebrew या MacPorts से dependencies मैनेज करें
$ xcode-select --install
$ brew install automake autoconf wxmac poppler cairo pkg-config
$ sudo port install automake autoconf wxWidgets-3.0 poppler cairo pkgconfig
- Windows पर Cairo और Poppler द्वारा उपयोग की जाने वाली लाइब्रेरी डिफ़ॉल्ट रूप से उपलब्ध नहीं होतीं, इसलिए अधिक dependencies की आवश्यकता होती है
- इनमें fontconfig, freetype, glib, libpng, pixman, gettext, libiconv, libjpeg, zlib आदि शामिल हैं
Windows पर MSYS + MinGW से बिल्ड
- Windows build के लिए MSYS2 environment और C++ compiler वाले MinGW installation की आवश्यकता होती है
- MSYS2 MinGW shell में diff-pdf source directory पर जाएँ
- अतिरिक्त MSYS components इंस्टॉल करें
$ pacman -Syu
$ pacman -S automake autoconf pkg-config make zip pactoys
$ pacboy -S gcc:p poppler:p wxWidgets:p
- इसके बाद Unix build प्रक्रिया की तरह ही build करें
$ ./bootstrap # केवल git रिपॉज़िटरी से build करते समय आवश्यक
$ ./configure
$ make
- आवश्यक DLL के साथ ZIP archive बनाने के लिए यह कमांड चलाएँ
$ make windows-dist
इंस्टॉलेशन और maintenance स्थिति
- Unix पर सामान्य
make install से इंस्टॉल करें
- Windows पर अलग इंस्टॉलेशन की आवश्यकता नहीं है; फ़ाइलों को इच्छित लोकेशन पर कॉपी करना पर्याप्त है
- अगर ऊपर दी गई प्रक्रिया से build किया है, तो आवश्यक फ़ाइलें बने हुए ZIP archive में होंगी
- रिपॉज़िटरी as-is आधार पर दी गई है और कोड पर सक्रिय विकास नहीं हो रहा
- सुधार के लिए स्वयं बदलाव करके pull request जमा करना अनुशंसित है
- feature request के implementation या fixes जैसी सहायता की उम्मीद करना कठिन है
1 टिप्पणियां
Hacker News राय
Claude 3.5 Sonnet से PDF.js का उपयोग करके PDF को canvas पर render करने और हर page के visual differences दिखाने वाला एक तेज़ web prototype बनवाया गया
Prompt दो थे: एक, दो PDF को drag-and-drop से लेकर pages को साथ-साथ दिखाना और differences होने पर तीसरी image में उन्हें highlight करना; दूसरा, इसे बिल्कुल React के बिना फिर से लिखना
नतीजा: https://tools.simonwillison.net/compare-pdfs
यह वास्तव में काफ़ी अच्छी तरह काम करता है। Screenshot: https://gist.github.com/simonw/9d7cbe02d448812f48070e7de13a5...
मुझे असली difference नहीं मिला, शायद मैं ही hallucination देख रहा हूँ
पिछली नौकरी में एक अस्थिर production publishing system के outputs को verify करना पड़ता था, इसलिए उस समय उपलब्ध PDF comparison tools के दर्जनों विकल्पों का परीक्षण किया था। उनमें सबसे अच्छा Delta Walker था; वह proprietary commercial Mac-only software था, लेकिन क़ीमत वाजिब थी, accuracy अच्छी थी, और graphics-भरे लंबे PDF भी अच्छी तरह संभाल लेता था
इस diff-pdf tool का भी मूल्यांकन किया था; कुछ मामलों में यह कमज़ोर था, लेकिन बहुत समय बीत जाने से details याद नहीं हैं। ज़्यादातर tools changes miss कर देते थे या false positives देते थे, और यह tool open source होने के कारण script करना आसान था, इसलिए और अफ़सोस हुआ
यह किसी के काम आ सकता है। ImageMagick से visual PDF comparison किया जा सकता है
magick compare -density "$DENSITY" -background white "$1[0]" "$2[0]" "$TMP"यहाँ density 100 है,
$1और$2compare की जाने वाली filenames हैं, और$TMPoutput file है। Multiple pages support करने के लिए extra काम चाहिए, इसलिए यह script इस्तेमाल की: https://gist.github.com/mbafford/7e6f3bef20fc220f68e467589bb...यह script
imgcatके साथ terminal में सीधे differences भी दिखाती है। इसके अलावा,convert -metric phash "$1" null: "$2" -compose Difference -layers composite -format '%[fx:mean]\n' info:जैसे तरीके से ImageMagick में perceptual hash difference भी निकाला जा सकता हैCustom diff tool को git में set किया जा सकता है, इसका उपयोग करते हुए
.gitconfigमें[diff "pdf"] command = ~/bin/git-diff-pdfडाला, और.gitattributesमें*.pdf binary diff=pdfसेट किया।~/bin/git-diff-pdfpoppler केpdftotext -layoutoutput diff औरpdf-compare-phashदोनों चलाता हैgit showमें इस custom diff का उपयोग करने के लिएgit show --ext-diffजैसा argument जोड़ना पड़ता है, लेकिनgit diffमें यह अपने-आप इस्तेमाल हो जाता हैhealthcare क्षेत्र की एक business-critical PDF generation app को बनाए रखने के लिए मैं इसे CI pipeline में इस्तेमाल करता रहा हूँ। यह app लगभग 2010 के आसपास शुरू हुई थी, और इस्तेमाल हो रहा RSpec helper यहाँ है: https://gist.github.com/thbar/d1ce2afef68bf6089aeae8d9ddc05d...
Code में git में stored baseline PDFs हैं, और test suite उन्हें फिर से generate करके verify करता है कि कुछ भी नहीं बदला
Visual changes या PDF library upgrades का audit करने में यह बहुत मददगार है
इससे Bob Nystrom का वह tool याद आता है, जो उन्होंने Crafting Interpreters की वास्तविक book version पर काम करते समय अपनी मदद के लिए बनाया था: 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) में hardware design tools की कमी पूरी करने के लिए इस tool का उपयोग किया गया है, और PCB design iteration process में schematics और Gerber files के visual differences देखने के लिए इसे इस्तेमाल किया जाता है
आख़िरकार इसका यह उपयोग थोड़ा अनोखा है, लेकिन अगर board के किसी दूसरे हिस्से में छोटा-मोटा बदलाव करते समय यह पक्का जानना हो कि radio circuit layout बिल्कुल नहीं बदला, तो visual diff बिल्कुल सही बैठता है
हालांकि अगले project में EDA tools के साथ ज़्यादा integrated approach आज़माना चाहूँगा। अगर किसी ने ऐसा रास्ता अपनाया हो तो जानना चाहूँगा
Beyond Compare से भी यह किया जा सकता है। मुफ़्त नहीं है, लेकिन बहुत महंगा भी नहीं है: https://www.scootersoftware.com/
यह टूल मुझे ज़्यादा पसंद है: https://www.qtrac.eu/diffpdf.html
अंतर को overlay करके दिखाने के बजाय यह GUI में side-by-side comparison देता है
--viewargument का उपयोग करने पर साधारण GUI में दो फ़ाइलों की visual comparison की जा सकती है$ diff-pdf --view a.pdf b.pdfएक विंडो खुलती है और आप हर फ़ाइल के पेज देख सकते हैं तथा details को zoom कर सकते हैं। Ctrl+arrow, और MacOS पर Cmd+arrow से दोनों पेजों की relative position भी खिसकाई जा सकती है, इसलिए सिर्फ position shift वाले अंतर खोजने में यह उपयोगी है
Fedora में इसे
diffpdfpackage के रूप में install किया जा सकता है। अब इसका maintenance नहीं होता, लेकिन यह बहुत अच्छी तरह काम करता है, और side-by-side GUI, drag and drop, text mode और visual mode—दोनों को support करता हैहमारी टीम में, अपनी तरफ़ के code changes के बाद बदल गए हो सकते third-party service PDFs की तुलना करने के लिए इस टूल का नियमित उपयोग होता है
दिलचस्प बात यह है कि GitHub इस project को काफ़ी बड़े
wxwin.m4की वजह से 46% shell मानता है