- 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
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 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
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,
$1dan$2adalah nama file yang akan dibandingkan, dan$TMPadalah 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 seperticonvert -metric phash "$1" null: "$2" -compose Difference -layers composite -format '%[fx:mean]\n' info:, Anda juga bisa mendapatkan perbedaan perceptual hash dari ImageMagickDengan memanfaatkan kemampuan git untuk mengatur tool diff kustom, saya menambahkan
[diff "pdf"] command = ~/bin/git-diff-pdfke.gitconfig, dan mengatur*.pdf binary diff=pdfdi.gitattributes.~/bin/git-diff-pdfmenjalankan perbedaan outputpdftotext -layoutdari poppler bersamapdf-compare-phashUntuk memakai diff kustom ini di
git show, Anda perlu menambahkan argumen sepertigit show --ext-diff, tetapi digit diffakan digunakan otomatisSaya 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 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/
Saya lebih suka alat ini: https://www.qtrac.eu/diffpdf.html
Alih-alih menampilkan perbedaan secara bertumpuk, alat ini melakukan perbandingan berdampingan di GUI
--view, dua berkas bisa dibandingkan secara visual di GUI sederhana$ diff-pdf --view a.pdf b.pdfSebuah 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
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 visualDi 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.m4yang cukup besar