1 पॉइंट द्वारा GN⁺ 2024-07-03 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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
  • openSUSE के लिए प्रीबिल्ट संस्करण openSUSE build service से प्राप्त किया जा सकता है

सोर्स से बिल्ड

  • बिल्ड सिस्टम 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 टिप्पणियां

 
GN⁺ 2024-07-03
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...

    • जानना चाहता हूँ कि Claude 3.5 का असरदार उपयोग कैसे करें। कुछ दिन पहले API access के लिए apply किया था, और console.anthropic.com के अलावा, अगर कोई ऐसा tool हो जिसमें API key डालकर local में Claude का अच्छा उपयोग किया जा सके, तो सुझाव चाहूँगा
    • यह जानने की जिज्ञासा है कि सिर्फ़ उन prompts से यहाँ तक पहुँचने के लिए कितना अतिरिक्त काम करना पड़ा। काफ़ी प्रभावशाली है
    • 4 दिन पुराने comment पर आपत्ति करना मुश्किल है, लेकिन मुझे समझ नहीं आ रहा कि दोनों PDF में फ़र्क क्या है
      मुझे असली 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 करना आसान था, इसलिए और अफ़सोस हुआ

    • लगता है Delta Walker अब Windows और Linux को भी support करता है: https://www.deltawalker.com/download
    • “Draftable” शानदार था
    • क्या pages को images के रूप में export करके फिर pixel differences compare करने से PDF के differences सही-सही नहीं मिल जाने चाहिए?
  • यह किसी के काम आ सकता है। ImageMagick से visual PDF comparison किया जा सकता है
    magick compare -density "$DENSITY" -background white "$1[0]" "$2[0]" "$TMP"
    यहाँ density 100 है, $1 और $2 compare की जाने वाली filenames हैं, और $TMP output 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-pdf poppler के pdftotext -layout output diff और pdf-compare-phash दोनों चलाता है
    git show में इस custom diff का उपयोग करने के लिए git show --ext-diff जैसा argument जोड़ना पड़ता है, लेकिन git diff में यह अपने-आप इस्तेमाल हो जाता है

    • git attributes तक इसे जोड़ देना एक स्तर ऊपर की बात है। ImageMagick को 10~20 साल इस्तेमाल करने के बाद भी उसकी ताक़त देखकर हैरानी होती है; यह सचमुच प्रेरणादायक open source software है
  • 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 करने में यह बहुत मददगार है

    • क्या आप PDF के अंदर signed digests का उपयोग कर रहे हैं?
    • क्या केवल PDF source या hash compare करके verify नहीं किया जा सकता?
  • इससे 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/

    • Beyond Compare उन टूल्स में से एक है जिनके लिए नियोक्ता के खरीदकर देने का इंतज़ार किए बिना खुद पैसे देना ठीक लगता है। कीमत के मुकाबले इसकी क्षमताएँ बेहद मूल्यवान हैं, यह cross-platform है, और इसका लाइसेंस भी बहुत उदार है। BC की टक्कर का कोई free open source comparison tool नहीं है
  • यह टूल मुझे ज़्यादा पसंद है: https://www.qtrac.eu/diffpdf.html
    अंतर को overlay करके दिखाने के बजाय यह GUI में side-by-side comparison देता है

    • GitHub विवरण के अनुसार, --view argument का उपयोग करने पर साधारण GUI में दो फ़ाइलों की visual comparison की जा सकती है
      $ diff-pdf --view a.pdf b.pdf
      एक विंडो खुलती है और आप हर फ़ाइल के पेज देख सकते हैं तथा details को zoom कर सकते हैं। Ctrl+arrow, और MacOS पर Cmd+arrow से दोनों पेजों की relative position भी खिसकाई जा सकती है, इसलिए सिर्फ position shift वाले अंतर खोजने में यह उपयोगी है
    • इसका एक open source/free version भी है और मैं इसे नियमित रूप से इस्तेमाल करता हूँ: https://www.qtrac.eu/diffpdf-foss.html
      Fedora में इसे diffpdf package के रूप में install किया जा सकता है। अब इसका maintenance नहीं होता, लेकिन यह बहुत अच्छी तरह काम करता है, और side-by-side GUI, drag and drop, text mode और visual mode—दोनों को support करता है
    • इस काम के लिए मैं BeyondCompare 5 इस्तेमाल करता हूँ
  • हमारी टीम में, अपनी तरफ़ के code changes के बाद बदल गए हो सकते third-party service PDFs की तुलना करने के लिए इस टूल का नियमित उपयोग होता है

  • दिलचस्प बात यह है कि GitHub इस project को काफ़ी बड़े wxwin.m4 की वजह से 46% shell मानता है

    • मैंने निजी private projects में भी ऐसा ही कुछ देखा है। लगता है GitHub का language ratio analysis गड़बड़ है। यह एक Python project है, Jupyter notebooks सिर्फ कुछ ही हैं, और Python files बहुत ज़्यादा हैं, इसलिए lines of code के हिसाब से 80% तो Python files ही होनी चाहिए, फिर भी GitHub project को 50% Jupyter मानता है