1 puan yazan GN⁺ 2024-07-03 | 1 yorum | WhatsApp'ta paylaş
  • 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

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

    • Claude 3.5’i etkili kullanmanın yollarını merak ediyorum. Birkaç gün önce API erişimine başvurdum; console.anthropic.com dışında, API anahtarını girip Claude’u yerelde verimli kullanmaya uygun araç önerisi almak isterim
    • Sadece bu promptlarla buraya kadar gelmek için ne kadar ek çalışma gerektiğini merak ediyorum. Oldukça etkileyici
    • 4 günlük bir yoruma itiraz etmek zor ama iki PDF arasındaki farkın ne olduğunu anlayamadım
      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ü

    • Görünüşe göre Delta Walker artık Windows ve Linux da destekliyor: https://www.deltawalker.com/download
    • “Draftable” harikaydı
    • Sayfaları görsel olarak dışa aktarıp ardından piksel farkını karşılaştırarak PDF farklarını doğru biçimde bulmak mümkün değil mi?
  • İ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, $1 ve $2 karşılaştırılacak dosya adları, $TMP ise çı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 imgcat ile farkı doğrudan terminalde gösterebiliyor. Ayrıca convert -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ınabiliyor
    Git’te özel diff aracı tanımlanabildiğinden yararlanarak .gitconfig içine [diff "pdf"] command = ~/bin/git-diff-pdf, .gitattributes içine ise *.pdf binary diff=pdf ekliyorum. ~/bin/git-diff-pdf, poppler’ın pdftotext -layout çıktı farkını ve pdf-compare-phash aracını birlikte çalıştırıyor
    git show içinde bu özel diff’i kullanmak için git show --ext-diff gibi bir argüman eklemek gerekiyor, ama git diff içinde otomatik olarak kullanılıyor

    • Git özniteliklerine kadar bağlamış olman bir seviye ileri. ImageMagick’i 10-20 yıldır kullansan bile hâlâ ne kadar güçlü olduğuna şaşırtan, gerçekten ilham verici bir açık kaynak yazılım
  • Sağ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

    • PDF içinde imzalı digest kullanıp kullanmadığınızı merak ediyorum
    • Doğrulama için sadece PDF kaynağını ya da hash’ini karşılaştırmak yeterli olmaz mı?
  • 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/

    • Beyond Compare, işverenin almasını beklemeden kendi cebimden para verdiğim, parasının karşılığını fazlasıyla veren araçlardan biri. Fiyatına göre sunduğu özellikler çok değerli, çapraz platform ve lisansı da oldukça cömert. BC ile boy ölçüşebilecek özgür açık kaynaklı bir karşılaştırma aracı yok
  • 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

    • GitHub açıklamasına göre --view argümanını kullanırsanız sade GUI içinde iki dosyayı görsel olarak karşılaştırabilirsiniz
      $ diff-pdf --view a.pdf b.pdf
      Bir 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
    • Bunun açık kaynak/ücretsiz sürümü de var ve düzenli olarak kullanıyorum: https://www.qtrac.eu/diffpdf-foss.html
      Fedora'da diffpdf paketi 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 destekliyor
    • Bu iş için BeyondCompare 5 kullanıyorum
  • Ekipte, 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.m4 yüzünden bu projeyi %46 shell olarak değerlendiriyor

    • Benzer bir şeyi kişisel özel projelerde de gördüm. GitHub'ın dil oranı analizi bozuk görünüyor. Bu bir Python projesi ve yalnızca birkaç Jupyter notebook var; ayrıca çok sayıda Python dosyası mevcut. Kod satırı sayısına göre %80'i Python dosyaları olmalı ama GitHub projeyi %50 Jupyter olarak görüyor.