1. Neden Node.js Puppeteer Çöküyor ve Gotenberg Nasıl Çözüyor?
Pek çok yazılım ekibi, başlangıçta PDF üretmek için Node.js içerisine puppeteer veya playwright kurarak page.pdf() fonksiyonunu çağırır. Ancak üretim ortamında eşzamanlı istekler arttıkça iki büyük felaket yaşanır:
- Chromium Zombi Süreçleri (Zombie Processes): Bir istek zaman aşımına uğradığında veya kullanıcı bağlantıyı kestiğinde Chromium sekmesi arka planda açık kalır. Her sekme 150-300 MB bellek işgal eder ve birkaç gün içinde sunucuda OOM (Out Of Memory) Killer devreye girerek tüm web uygulamasını çökertir.
- Gotenberg Süreç Geri Dönüşümü (Process Recycling): Saf Go ile yazılan Gotenberg, Chromium ve LibreOffice süreçlerini birer harici alt işlem (supervisor child process) olarak yönetir. Her 30 istekte bir veya her boşta kalma anında Chromium örneğini sıfırdan tazeler (recycle). Böylece bellek sızıntısı matematiksel olarak sıfırlanır.
- Geçici Bellek Dosya Sistemi (tmpfs): Gotenberg,
/tmpdizinini RAM üzerinde (tmpfs) bağlayarak diske tek bir I/O işlemi yapmadan saniyede onlarca PDF derler; bu da NVMe SSD yıpranmasını önler ve yanıt süresini %40 kısaltır.
2. W3C CSS Paged Media Standardı vs Tarayıcı Yazdırma (Print Preview)
Geleneksel tarayıcılar (Chromium / Firefox), sayfaları ekrana çizmek (screen media) için optimize edilmiştir. Sayfa numaralandırma ("Sayfa 2 / 10"), tekrarlayan tablo başlıkları, kesim payları ve dipnotlar söz konusu olduğunda CSS standardı olan CSS Paged Media devreye girer.
Gotenberg (Chromium) Avantajları
Dinamik JavaScript grafiklerini (Chart.js, Recharts, ApexCharts), modern Flexbox/Grid düzenlerini, Web Fontlarını (Google Fonts) ve Canvas öğelerini birebir tarayıcı doğruluğunda PDF'e basar.
WeasyPrint Avantajları
W3C @page kurallarını harfiyen uygular. Sayfa üstbilgi ve altbilgilerini saf CSS ile oluşturur. Tarayıcı motoru içermediği için 45 MB RAM tüketir ve statik faturaları 100 milisaniyenin altında üretir.
3. Kurumsal Arşivleme: PDF/A-1a ve PDF/A-2b Standartları
Devlet kurumları, e-fatura entegratörleri, bankalar ve sigorta şirketleri üretilen belgelerin 10-20 yıl sonra da aynı fontlar ve biçimlendirmeyle açılabilmesini zorunlu tutar. Bu zorunluluğa PDF/A (ISO 19005) denir.
- Gömülü Yazı Tipleri (Embedded Fonts): Belgede kullanılan tüm yazı tipleri (TrueType/OpenType) PDF dosyasının içine gömülür.
- Cihazdan Bağımsız Renk Uzayı (Device-Independent Color): sRGB veya ICC renk profilleri tanımlanarak farklı ekran ve yazıcılarda renk sapması önlenir.
- Gotenberg PDF/A Desteği: Gotenberg,
pdfFormat=PDF/A-1aveyaPDF/A-2bparametresiyle arka planda Ghostscript veya QPDF motorlarını çalıştırarak uluslararası e-arşiv uyumluluğunu tek tıkla sağlar.
4. Bulut SaaS (DocRaptor / PDFShift) vs VDS Finansal Özeti
DocRaptor gibi sağlayıcılar kaliteli çıktı sunsa da belge hacmi büyüdükçe astronomik kâr marjları talep eder. Örneğin ayda 50.000 adet e-fatura üreten bir e-ticaret şirketi:
Üstelik verileriniz (müşteri T.C. kimlik numaraları, fatura tutarları, sipariş adresleri) yurt dışındaki üçüncü taraf bulut API'lerine sızmaz; tamamen kendi Türkiye veya Avrupa lokasyonlu VDS sunucunuzda izole kalarak KVKK ve GDPR uyumluluğu garanti altına alınır.