1 poin oleh GN⁺ 2024-07-03 | 1 komentar | Bagikan ke WhatsApp
  • diff-pdf adalah alat untuk membandingkan dua file PDF secara visual; saat dijalankan secara default, alat ini mengembalikan kode keluar 0 jika tidak ada perbedaan, dan 1 jika ada perbedaan
  • Dengan opsi --output-diff, Anda dapat membuat PDF dengan perbedaan yang disorot secara visual
  • Opsi --view membuka tampilan perbandingan GUI sederhana untuk memeriksa halaman dan memperbesar, serta memungkinkan memindahkan posisi relatif dua halaman dengan panah Ctrl/Cmd
  • Paket prabuild atau jalur instalasi melalui package manager tersedia untuk Windows, macOS, Fedora, CentOS 8, dan openSUSE
  • Repositori ini disediakan apa adanya dan tidak sedang dikembangkan secara aktif, sehingga sulit mengharapkan dukungan untuk permintaan fitur atau perbaikan; peningkatan diterima dalam bentuk pull request

Apa yang dilakukan diff-pdf

  • diff-pdf menerima dua file PDF sebagai argumen dan membandingkannya secara visual
  • Output default hanyalah kode keluar
    • 0 jika tidak ada perbedaan
    • 1 jika kedua PDF berbeda
  • Untuk membuat PDF dengan perbedaan yang disorot, gunakan opsi --output-diff
$ diff-pdf --output-diff=diff.pdf a.pdf b.pdf

Mode perbandingan GUI

  • Jika menggunakan opsi --view, Anda dapat membandingkan dua file dalam GUI sederhana
$ diff-pdf --view a.pdf b.pdf
  • Di jendela GUI, Anda dapat melihat halaman PDF dan memperbesar detail
  • Dengan panah Ctrl, atau panah Cmd di macOS, Anda dapat menggeser posisi relatif dua halaman
    • Berguna untuk memeriksa perbedaan yang hanya berupa perubahan posisi
  • Dengan Ctrl+<, Ctrl+> Anda dapat melihat masing-masing dokumen kiri dan kanan
    • Di macOS, gunakan Cmd+<, Cmd+>
  • Anda dapat kembali ke tampilan diff dengan Ctrl+D
  • Daftar opsi lengkap dapat dilihat di $ diff-pdf --help

Instalasi biner

  • Versi prabuild untuk Windows tersedia sebagai arsip ZIP di latest release
    • Dapat dijalankan dari lokasi mana pun setelah diekstrak
  • Jika menggunakan Chocolatey di Windows, instal dengan perintah berikut
$ choco install diff-pdf
  • Jika menggunakan Homebrew di macOS, instal dengan perintah berikut
$ brew install diff-pdf
  • Jika menggunakan MacPorts di macOS, instal dengan perintah berikut
$ port install diff-pdf
  • Di Fedora dan CentOS 8, instal dengan perintah berikut
$ sudo dnf install diff-pdf

Build dari sumber

  • Sistem build menggunakan Automake, sehingga memerlukan Unix atau lingkungan mirip Unix seperti Cygwin/MSYS
  • Prosedur build umum adalah sebagai berikut
$ ./bootstrap
$ ./configure
$ make
$ make install
  • ./bootstrap hanya diperlukan saat membangun sumber yang di-checkout dari sistem kontrol versi, yaitu ketika configure dan Makefile.in belum ada
  • Library yang diperlukan adalah sebagai berikut
    • wxWidgets >= 3.0
    • Cairo >= 1.4
    • Poppler >= 0.10

Dependensi per platform

  • Di CentOS, instal alat pengembangan serta paket terkait wxGTK dan Poppler GLib
$ sudo yum groupinstall "Development Tools"
$ sudo yum install wxGTK wxGTK-devel poppler-glib poppler-glib-devel
  • Di Ubuntu 24.04 / Debian 12 atau yang lebih baru, gunakan libwxgtk3.2-dev
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.2-dev
  • Di Ubuntu / Debian yang lebih lama, gunakan libwxgtk3.0-gtk3-dev
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.0-gtk3-dev
  • Di macOS, setelah memasang Xcode Command Line Tools, kelola dependensi dengan Homebrew atau MacPorts
$ xcode-select --install
$ brew install automake autoconf wxmac poppler cairo pkg-config
$ sudo port install automake autoconf wxWidgets-3.0 poppler cairo pkgconfig
  • Di Windows, library yang digunakan Cairo dan Poppler tidak tersedia secara bawaan, sehingga memerlukan lebih banyak dependensi
    • Termasuk fontconfig, freetype, glib, libpng, pixman, gettext, libiconv, libjpeg, zlib, dan lainnya

Build di Windows dengan MSYS + MinGW

  • Build di Windows memerlukan lingkungan MSYS2 dan instalasi MinGW yang menyertakan kompiler C++
  • Di shell MSYS2 MinGW, pindah ke direktori sumber diff-pdf
  • Instal komponen MSYS tambahan
$ pacman -Syu
$ pacman -S automake autoconf pkg-config make zip pactoys
$ pacboy -S gcc:p poppler:p wxWidgets:p
  • Setelah itu, build dengan prosedur yang sama seperti di Unix
$ ./bootstrap  # hanya diperlukan saat build dari repositori git
$ ./configure
$ make
  • Untuk membuat arsip ZIP yang menyertakan DLL yang diperlukan, jalankan perintah berikut
$ make windows-dist

Instalasi dan status pemeliharaan

  • Di Unix, instal dengan make install seperti biasa
  • Di Windows, tidak perlu instalasi terpisah; cukup salin file ke lokasi yang diinginkan
    • Jika dibangun dengan prosedur di atas, file yang diperlukan sudah ada dalam arsip ZIP yang dihasilkan
  • Repositori ini disediakan apa adanya dan kodenya tidak sedang dikembangkan secara aktif
    • Jika ingin meningkatkan, disarankan melakukan perubahan sendiri lalu mengirimkan pull request
    • Sulit mengharapkan dukungan seperti implementasi permintaan fitur atau perbaikan

1 komentar

 
GN⁺ 2024-07-03
Komentar Hacker News
  • Saya meminta Claude 3.5 Sonnet membuat prototipe web cepat yang menggunakan PDF.js untuk merender PDF ke canvas dan menampilkan perbedaan visual per halaman
    Prompt-nya ada dua: menerima dua PDF lewat drag-and-drop, menampilkan halaman berdampingan dan, jika ada perbedaan, menyorotnya sebagai gambar ketiga; lalu menulis ulang agar sama sekali tidak memakai React
    Hasilnya: https://tools.simonwillison.net/compare-pdfs
    Praktiknya bekerja cukup baik. Screenshot: https://gist.github.com/simonw/9d7cbe02d448812f48070e7de13a5...

    • Saya penasaran bagaimana cara memakai Claude 3.5 secara efektif. Beberapa hari lalu saya mengajukan akses API; selain console.anthropic.com, kalau ada tool yang bagus untuk memanfaatkan Claude secara lokal dengan memasukkan API key, saya ingin mendapat rekomendasi
    • Saya penasaran berapa banyak pekerjaan tambahan yang diperlukan untuk membuat sampai sejauh ini hanya dengan prompt itu. Cukup mengesankan
    • Sulit memang mempermasalahkan komentar yang sudah 4 hari, tapi saya tidak tahu apa perbedaan antara dua PDF itu
      Saya tidak menemukan perbedaan nyata, dan mungkin saja saya sedang berhalusinasi
  • Di tempat kerja lama, saya harus memverifikasi output dari sistem penerbitan produksi yang tidak stabil, jadi saya menguji puluhan tool pembanding PDF yang tersedia saat itu. Yang paling bagus di antaranya adalah Delta Walker; itu software komersial proprietary khusus Mac, tetapi harganya masuk akal, akurat, dan juga menangani PDF panjang yang banyak grafiknya dengan baik
    Saya juga mengevaluasi tool diff-pdf ini dan ada beberapa aspek yang kurang, tetapi sudah terlalu lama jadi saya tidak ingat detailnya. Kebanyakan tool melewatkan perubahan atau menghasilkan false positive, dan karena tool ini open source serta mudah dibuat skripnya, rasanya makin disayangkan

    • Sepertinya Delta Walker sekarang juga mendukung Windows dan Linux: https://www.deltawalker.com/download
    • “Draftable” sangat bagus
    • Kalau halaman diekspor sebagai gambar lalu membandingkan perbedaan piksel, bukankah itu bisa menemukan perbedaan PDF secara akurat?
  • Terkait ini, mungkin berguna bagi seseorang. Perbandingan PDF secara visual bisa dilakukan dengan ImageMagick
    magick compare -density "$DENSITY" -background white "$1[0]" "$2[0]" "$TMP"
    Di sini density adalah 100, $1 dan $2 adalah nama file yang akan dibandingkan, dan $TMP adalah file output. Untuk mendukung banyak halaman perlu pekerjaan tambahan, jadi saya memakai skrip ini: https://gist.github.com/mbafford/7e6f3bef20fc220f68e467589bb...
    Skrip ini juga langsung menampilkan perbedaannya di terminal dengan imgcat. Selain itu, dengan cara seperti convert -metric phash "$1" null: "$2" -compose Difference -layers composite -format '%[fx:mean]\n' info:, Anda juga bisa mendapatkan perbedaan perceptual hash dari ImageMagick
    Dengan memanfaatkan kemampuan git untuk mengatur tool diff kustom, saya menambahkan [diff "pdf"] command = ~/bin/git-diff-pdf ke .gitconfig, dan mengatur *.pdf binary diff=pdf di .gitattributes. ~/bin/git-diff-pdf menjalankan perbedaan output pdftotext -layout dari poppler bersama pdf-compare-phash
    Untuk memakai diff kustom ini di git show, Anda perlu menambahkan argumen seperti git show --ext-diff, tetapi di git diff akan digunakan otomatis

    • Menghubungkannya sampai ke atribut git itu satu level di atas. Walau sudah memakai ImageMagick selama 10–20 tahun, saya masih sering terkejut betapa kuatnya; benar-benar software open source yang inspiratif
  • Saya sudah memakai ini di pipeline CI untuk memelihara aplikasi pembuat PDF yang kritis bagi bisnis di bidang medis. Aplikasinya kira-kira dimulai sekitar 2010, dan helper RSpec yang dipakai ada di sini: https://gist.github.com/thbar/d1ce2afef68bf6089aeae8d9ddc05d...
    Di kodenya ada PDF acuan yang disimpan di git, dan test suite membuatnya ulang untuk memverifikasi bahwa tidak ada yang berubah
    Ini sangat membantu untuk mengaudit perubahan visual atau upgrade library PDF

    • Saya penasaran apakah Anda memakai digest bertanda tangan di dalam PDF
    • Tidak bisakah verifikasi dilakukan cukup dengan membandingkan source atau hash PDF?
  • Saya teringat tool yang dibuat Bob Nystrom untuk membantu dirinya saat mengerjakan versi buku fisik Crafting Interpreters: https://journal.stuffwithstuff.com/2020/04/05/crafting-craft...
    Seluruh artikelnya layak dibaca, tetapi kalau hanya ingin melihat bagian terkait, cari “I wrote a Dart script that would take a PDF of the book”

  • Di Micro:bit Educational Foundation(microbit.org), kami telah memakai tool ini untuk menutup celah pada tool desain hardware, dan menggunakannya untuk memeriksa perbedaan visual pada skematik dan file Gerber selama proses iterasi desain PCB
    Memang agak unik akhirnya dipakai seperti ini, tetapi jika ingin benar-benar yakin bahwa tata letak rangkaian radio sama sekali tidak berubah saat melakukan perubahan kecil di bagian lain papan, visual diff memang sangat pas
    Namun untuk proyek berikutnya, saya ingin mencoba pendekatan yang lebih terintegrasi dengan tool EDA. Saya ingin tahu kalau ada yang pernah menempuh jalan serupa

  • Bisa juga dilakukan dengan Beyond Compare. Memang tidak gratis, tetapi juga tidak terlalu mahal: https://www.scootersoftware.com/

    • Beyond Compare adalah salah satu alat yang sepadan harganya, yang saya bayar sendiri tanpa menunggu perusahaan membelikannya. Fitur yang didapat untuk harganya sangat bernilai, lintas platform, dan lisensinya juga sangat longgar. Tidak ada alat perbandingan bebas dan open source yang sebanding dengan BC
  • Saya lebih suka alat ini: https://www.qtrac.eu/diffpdf.html
    Alih-alih menampilkan perbedaan secara bertumpuk, alat ini melakukan perbandingan berdampingan di GUI

    • Menurut deskripsi GitHub, dengan argumen --view, dua berkas bisa dibandingkan secara visual di GUI sederhana
      $ diff-pdf --view a.pdf b.pdf
      Sebuah jendela akan terbuka dan Anda bisa melihat halaman dari masing-masing berkas serta memperbesar detailnya. Dengan Ctrl+panah, atau Cmd+panah di MacOS, posisi relatif kedua halaman juga bisa digeser, sehingga berguna untuk menemukan perbedaan yang hanya berupa pergeseran posisi
    • Ada juga versi open source/gratis dari ini, dan saya menggunakannya secara rutin: https://www.qtrac.eu/diffpdf-foss.html
      Di Fedora, ini bisa dipasang sebagai paket diffpdf. Meski sudah tidak lagi dipelihara, alat ini bekerja dengan sangat baik, dan mendukung GUI tampilan berdampingan, drag-and-drop, mode teks, serta mode visual
    • Saya memakai BeyondCompare 5 untuk keperluan ini
  • Di tim, kami rutin memakai alat ini saat membandingkan PDF dari layanan pihak ketiga yang mungkin berubah setelah perubahan kode di sisi kami

  • Menariknya, GitHub menilai proyek ini sebagai 46% shell karena wxwin.m4 yang cukup besar

    • Saya pernah melihat hal serupa di proyek privat pribadi. Sepertinya analisis persentase bahasa di GitHub rusak. Proyeknya Python dan hanya ada beberapa notebook Jupyter serta banyak sekali berkas Python; berdasarkan jumlah baris kode, mungkin 80% adalah berkas Python, tetapi GitHub melihat proyek itu sebagai 50% Jupyter