- diff-pdf, iki PDF dosyasını görsel olarak karşılaştıran bir araçtır; varsayılan çalışmada fark yoksa çıkış kodu 0, fark varsa 1 döndürür
--output-diff seçeneği kullanıldığında farkların görsel olarak vurgulandığı bir PDF üretilebilir
--view seçeneği, sayfaları inceleyip yakınlaştırabileceğiniz basit bir GUI karşılaştırma ekranı açar; Ctrl/Cmd ok tuşlarıyla iki sayfanın göreli konumu kaydırılabilir
- Windows, macOS, Fedora, CentOS 8 ve openSUSE için önceden derlenmiş paketler veya paket yöneticisi kurulum yolları sunulur
- Depo olduğu gibi sunulur ve aktif olarak geliştirilmiyor; bu yüzden özellik isteği ya da düzeltme desteği beklemek zordur, iyileştirmeler pull request olarak kabul edilir
diff-pdf ne yapar
- diff-pdf, iki PDF dosyasını argüman olarak alır ve görsel olarak karşılaştırır
- Varsayılan çıktı yalnızca çıkış kodudur
- fark yoksa
0
- iki PDF farklıysa
1
- Farkların vurgulandığı bir PDF oluşturmak için
--output-diff seçeneği kullanılır
$ diff-pdf --output-diff=diff.pdf a.pdf b.pdf
GUI karşılaştırma modu
--view seçeneğini kullanırsanız iki dosyayı basit bir GUI içinde karşılaştırabilirsiniz
$ diff-pdf --view a.pdf b.pdf
- GUI penceresinde PDF sayfalarını görebilir ve ayrıntıları yakınlaştırabilirsiniz
- Ctrl ok tuşlarıyla, macOS’te ise Cmd ok tuşlarıyla iki sayfanın göreli konumu kaydırılabilir
- yalnızca konumu farklı olan farkları doğrulamak için faydalıdır
Ctrl+<, Ctrl+> ile sırasıyla sol belgeyi ve sağ belgeyi görüntüleyebilirsiniz
- macOS’te
Cmd+<, Cmd+> kullanılır
Ctrl+D ile diff görünümüne geri dönebilirsiniz
- Tüm seçeneklerin listesi için
$ diff-pdf --help komutuna bakabilirsiniz
İkili kurulum
- Windows için önceden derlenmiş sürüm, latest release içindeki ZIP arşivi olarak sunulur
- arşivi çıkardıktan sonra bulunduğu herhangi bir konumdan çalıştırılabilir
- Windows’ta Chocolatey kullanıyorsanız şu komutla kurabilirsiniz
$ choco install diff-pdf
- macOS’te Homebrew kullanıyorsanız şu komutla kurabilirsiniz
$ brew install diff-pdf
- macOS’te MacPorts kullanıyorsanız şu komutla kurabilirsiniz
$ port install diff-pdf
- Fedora ve CentOS 8’de şu komutla kurabilirsiniz
$ sudo dnf install diff-pdf
Kaynaktan derleme
- Derleme sistemi Automake kullanır; bu nedenle Unix ya da Cygwin/MSYS gibi Unix benzeri bir ortam gerekir
- Genel derleme adımları şöyledir
$ ./bootstrap
$ ./configure
$ make
$ make install
./bootstrap, yalnızca sürüm kontrol sisteminden checkout edilen kaynağı derlerken, yani configure ve Makefile.in yokken gereklidir
- Gerekli kütüphaneler şunlardır
wxWidgets >= 3.0
Cairo >= 1.4
Poppler >= 0.10
Platforma göre bağımlılıklar
- CentOS’ta geliştirme araçları ve wxGTK ile Poppler GLib paketleri kurulur
$ sudo yum groupinstall "Development Tools"
$ sudo yum install wxGTK wxGTK-devel poppler-glib poppler-glib-devel
- Ubuntu 24.04 / Debian 12 ve sonrasında
libwxgtk3.2-dev kullanılır
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.2-dev
- Daha eski Ubuntu / Debian sürümlerinde
libwxgtk3.0-gtk3-dev kullanılır
$ sudo apt-get install make automake g++
$ sudo apt-get install libpoppler-glib-dev poppler-utils libwxgtk3.0-gtk3-dev
- macOS’te önce Xcode Command Line Tools kurulur, ardından bağımlılıklar Homebrew veya MacPorts ile yönetilir
$ xcode-select --install
$ brew install automake autoconf wxmac poppler cairo pkg-config
$ sudo port install automake autoconf wxWidgets-3.0 poppler cairo pkgconfig
- Windows’ta Cairo ve Poppler’ın kullandığı kütüphaneler varsayılan olarak gelmediği için daha fazla bağımlılık gerekir
- bunlara fontconfig, freetype, glib, libpng, pixman, gettext, libiconv, libjpeg, zlib ve benzerleri dahildir
Windows’ta MSYS + MinGW ile derleme
- Windows derlemesi için MSYS2 ortamı ve C++ derleyicisi içeren bir MinGW kurulumu gerekir
- MSYS2 MinGW kabuğunda diff-pdf kaynak dizinine geçin
- Ek MSYS bileşenlerini kurun
$ pacman -Syu
$ pacman -S automake autoconf pkg-config make zip pactoys
$ pacboy -S gcc:p poppler:p wxWidgets:p
- Ardından Unix derleme süreciyle aynı şekilde derleyin
$ ./bootstrap # yalnızca git deposundan derliyorsanız gerekir
$ ./configure
$ make
- Gerekli DLL’leri içeren bir ZIP arşivi oluşturmak için şu komutu çalıştırın
$ make windows-dist
Kurulum ve bakım durumu
- Unix’te standart
make install ile kurulur
- Windows’ta ayrı bir kurulum gerekmez; dosyaları istediğiniz konuma kopyalamanız yeterlidir
- yukarıdaki adımlarla derlediyseniz gerekli dosyalar oluşturulan ZIP arşivinin içinde yer alır
- Depo olduğu gibi sunulur ve kod aktif olarak geliştirilmemektedir
- iyileştirme yapmak istiyorsanız değişiklikleri kendiniz yapıp pull request göndermeniz önerilir
- özellik isteği uygulama ya da düzeltme desteği gibi bir destek beklemek zordur
1 yorum
Hacker News yorumları
Claude 3.5 Sonnet ile PDF.js kullanarak PDF’leri canvas üzerinde render eden ve sayfa bazında görsel farkları gösteren hızlı bir web prototipi yaptırdım
Promptlar şunlardı: iki PDF’yi sürükle-bırak ile alması, sayfaları yan yana göstermesi ve fark varsa üçüncü bir görselde vurgulaması; ayrıca bunu React hiç kullanmadan yeniden yazması
Ortaya çıkan şey: https://tools.simonwillison.net/compare-pdfs
Pratikte oldukça iyi çalışıyor. Ekran görüntüsü: https://gist.github.com/simonw/9d7cbe02d448812f48070e7de13a5...
Gerçek bir fark bulamadım; belki de halüsinasyon görüyorumdur
Eski iş yerimde kararsız bir üretim yayıncılık sisteminin çıktısını doğrulamamız gerekiyordu; o dönemde kullanılabilen onlarca PDF karşılaştırma aracını test etmiştim. İçlerinden en iyisi Delta Walker’dı; özel mülkiyetli, ücretli ve yalnızca Mac için olan bir yazılımdı ama fiyatı makuldü, doğru sonuç veriyordu ve grafiği yoğun uzun PDF’leri de iyi işliyordu
Bu diff-pdf aracını da değerlendirmiştim; bazı açılardan yetersizdi ama üzerinden çok zaman geçtiği için ayrıntıları hatırlamıyorum. Çoğu araç değişiklikleri kaçırıyor ya da yanlış pozitif üretiyordu; bunun açık kaynak olması ve kolayca scriptleştirilebilmesi nedeniyle daha da üzücüydü
İlgili olarak, birine faydalı olabilir. ImageMagick ile görsel PDF karşılaştırması yapmak mümkün
magick compare -density "$DENSITY" -background white "$1[0]" "$2[0]" "$TMP"Burada density 100,
$1ve$2karşılaştırılacak dosya adları,$TMPise çıktı dosyası. Birden fazla sayfayı desteklemek için ek çalışma gerektiğinden şu scripti kullanıyorum: https://gist.github.com/mbafford/7e6f3bef20fc220f68e467589bb...Bu script ayrıca
imgcatile farkı doğrudan terminalde gösterebiliyor. Ayrıcaconvert -metric phash "$1" null: "$2" -compose Difference -layers composite -format '%[fx:mean]\n' info:gibi bir yöntemle ImageMagick’ten algısal hash farkı da alınabiliyorGit’te özel diff aracı tanımlanabildiğinden yararlanarak
.gitconfigiçine[diff "pdf"] command = ~/bin/git-diff-pdf,.gitattributesiçine ise*.pdf binary diff=pdfekliyorum.~/bin/git-diff-pdf, poppler’ınpdftotext -layoutçıktı farkını vepdf-compare-phasharacını birlikte çalıştırıyorgit showiçinde bu özel diff’i kullanmak içingit show --ext-diffgibi bir argüman eklemek gerekiyor, amagit diffiçinde otomatik olarak kullanılıyorSağlık alanında iş açısından kritik bir PDF üretim uygulamasını sürdürmek için bunu CI hattında kullanıyorum. Uygulama kabaca 2010 civarında başladı ve kullandığım RSpec helper burada: https://gist.github.com/thbar/d1ce2afef68bf6089aeae8d9ddc05d...
Kodda Git’te saklanan referans PDF’ler var ve test paketi bunları yeniden üretip hiçbir şeyin değişmediğini doğruluyor
Görsel değişiklikleri ya da PDF kütüphanesi yükseltmelerini denetlemek için çok yardımcı oluyor
Bob Nystrom’un, Crafting Interpreters kitabının basılı sürümü üzerinde çalışırken kendisine yardımcı olmak için yazdığı araç aklıma geldi: https://journal.stuffwithstuff.com/2020/04/05/crafting-craft...
Yazının tamamı okunmaya değer ama yalnızca ilgili kısmı görmek istiyorsanız “I wrote a Dart script that would take a PDF of the book” diye aratabilirsiniz
Micro:bit Educational Foundation (microbit.org) olarak, donanım tasarım araçlarındaki bir boşluğu kapatmak için bu aracı kullanıyoruz; PCB tasarım yinelemelerinde şema ve Gerber dosyalarının görsel farklarını kontrol etmekte işe yarıyor
Sonunda buna bu şekilde ihtiyaç duymamız biraz sıra dışı ama kartın başka kısımlarında küçük değişiklikler yaparken RF yerleşiminin hiç değişmediğinden emin olmak istiyorsanız görsel diff tam buna uygun
Yine de bir sonraki projede EDA araçlarıyla daha bütünleşik bir yaklaşım denemek isterim. Benzer bir yoldan geçmiş olan varsa bilmek isterim
Beyond Compare ile de yapılabilir. Ücretsiz değil ama aşırı pahalı da değil: https://www.scootersoftware.com/
Ben bunu daha çok beğeniyorum: https://www.qtrac.eu/diffpdf.html
Farkları üst üste bindirerek göstermek yerine GUI içinde yan yana karşılaştırma yapıyor
--viewargümanını kullanırsanız sade GUI içinde iki dosyayı görsel olarak karşılaştırabilirsiniz$ diff-pdf --view a.pdf b.pdfBir pencere açılır ve her dosyanın sayfalarını görebilir, ayrıntıları yakınlaştırabilirsiniz. Ctrl+ok tuşlarıyla, MacOS'ta ise Cmd+ok tuşlarıyla iki sayfanın göreli konumunu da kaydırabilirsiniz; bu da yalnızca konum kayması olan farkları bulmak için kullanışlıdır
Fedora'da
diffpdfpaketi olarak kurulabiliyor. Artık bakımı yapılmıyor ama çok iyi çalışıyor; yan yana görünüm GUI'si, sürükle bırak ve hem metin modu hem de görsel modu destekliyorEkipte, bizim taraftaki kod değişikliklerinden sonra değişmiş olabilecek üçüncü taraf servis PDF'lerini karşılaştırırken bu aracı düzenli olarak kullanıyoruz
İlginç şekilde GitHub, oldukça büyük
wxwin.m4yüzünden bu projeyi %46 shell olarak değerlendiriyor