Sivas'ta bir işletmenin faturası, bir kurumun raporu ya da bir kooperatifin üye listesi PDF'e çevrilecekse bugüne kadar bu iş çoğunlukla sunucuda yapılıyordu. Sayfa sunucuya gönderiliyor, sunucu HTML'i işleyip PDF üretiyor ve dosya kullanıcıya indiriliyordu. Sunucunun işlemci gücü bu işe ayrıldığı için, ay sonu gibi yoğun günlerde istekler sıraya giriyordu.
Türkiye'de geliştirilen açık kaynak bir JavaScript kütüphanesi olan htpo, bu işi sunucudan alıp ziyaretçinin kendi tarayıcısına taşıyor. Proje 0.1.0 sürümüyle yayımlandı ve geliştirici tarafından açıkça deneysel olarak işaretlendi. Yani henüz üretim ortamında sınanmış bir araç değil.
Sayfa sunucuya gitmiyor, PDF tarayıcıda üretiliyor
Kütüphanenin çalışma biçimi kısa: sayfa tarayıcıda hazırlanıyor, PDF motoru da aynı tarayıcı içinde çalışıyor. htpo'nun paket sayfasındaki bilgilere göre çalışma zamanında hiçbir bağımlılığı yok; PDF motoru ve varsayılan fontlar aynı tek dosyanın içine gömülü. Kurulum da bu yüzden tek satır:
npm install @8bit.tr/htpo
Alternatif olarak tek bir script dosyası doğrudan sayfaya eklenebiliyor. Kullanım da birkaç satırdan oluşuyor:
const pdf = await Htpo.toPdf(html, {
format: 'a4', mode: 'vector'
});
pdf.save('rapor.pdf');
mode: vector seçildiğinde çıktıda metin seçilebiliyor, fontlar gömülü geliyor ve HTTP, mailto, tel bağlantıları korunuyor. mode: raster ise her sayfayı görüntü olarak saklıyor; bu durumda metin seçilemiyor ve bağlantılar kayboluyor. Fatura ya da tutanak gibi sonradan aranması, kopyalanması gereken belgelerde vektör modu öne çıkıyor.
Türkçe karakterler için gömülü font
Sivas'taki kurumlar için pratik önemi olan ayrıntı Türkçe karakterler. Projenin README dosyasında gömülü DejaVu Sans fontlarının Türkçe karakterleri desteklediği özellikle belirtiliyor; testlerde Türkçe ve Unicode metnin korunması, font alt kümeleme ve metinden geri çıkarma doğrulanmış. Fatura ve resmî yazışmalarda ş, ğ, ı, İ gibi harflerin bozuk çıkması sık karşılaşılan bir sorun olduğu için bu, yerel kullanım açısından kayda değer.
Bunun karşılığında bazı sınırlar da var ve bunlar projenin kendi belgesinde yazıyor: PDF/A arşiv standardı, etiketli (erişilebilir) PDF, form alanları, şifreleme ve dijital imza desteklenmiyor. WOFF ve WOFF2 fontlar, değişken fontlar ve karmaşık yazı sistemleri de kapsam dışı; bu durumlarda raster mod öneriliyor. Resmî belgelerde dijital imza ya da arşiv standardı şart koşuluyorsa htpo tek başına yetmez.
Eski araçlarla karşılaştırma: ölçüm değil, yaklaşım farkı
htpo'nun belgesinde qt-webkit adlı bir uyumluluk modu bulunuyor. Bu mod, eski Qt WebKit düzenini taklit ediyor; satır yüksekliklerini tam piksele yuvarlıyor, görsellere belirli bir yerleştirme kuralı uyguluyor. Belgede bu modun, sunucuda HTML'i PDF'e çeviren eski araçların motoruna yaklaşmak için konduğu belirtiliyor. Yani mevcut şablonlarını bırakmak istemeyen bir ekip, çıktıyı kabaca koruyarak işi tarayıcıya taşıyabilir.
Burada bir sınırı baştan söylemek gerekiyor: htpo ile eski araçlar arasında yapılmış bir hız ya da maliyet ölçümü yok. "Şu kadar hızlı", "sunucu maliyeti şu kadar düşer" gibi bir sayı hiçbir kaynakta yer almıyor; bu haber de böyle bir sayı vermiyor. Anlatılan fark mimari: işlem yükü sunucudan çıkıp kullanıcının makinesine geçiyor. Bu, sunucudaki kuyruğu azaltabilecek bir yaklaşım, ama gerçekten ne kadar kazanç sağladığı ancak kendi sisteminizde ölçülerek anlaşılır.
| Konu | Sunucuda üretim | Tarayıcıda üretim (htpo) |
|---|---|---|
| İşlem nerede | Sunucu | Ziyaretçinin tarayıcısı |
| Yoğunlukta | İstekler kuyruğa girer | Yük kullanıcıya dağılır |
| Bağımlılık | Sunucuda kurulu araçlar | Tek script, çalışma zamanında bağımlılık yok |
| Olgunluk | Yıllardır kullanılan araçlar | 0.1.0, deneysel |
Kimin işine yarar, kimin beklemesi gerekir
Sivas'ta e-fatura, e-arşiv ya da üyelik belgesi üreten küçük ve orta ölçekli işletmeler için cazip tarafı şu: ayrı bir sunucu kurmadan, tarayıcıda çalışan tek bir dosyayla PDF üretilebiliyor. Aynı mantık, belediye ve kamu kurumlarında form doldurup belge indirme akışlarında da kullanılabilir.
Beklemesi gerekenler de var. Projenin GitHub deposu yeni: tek bir commit, tek bir yıldız ve tek bir etiketle açılmış durumda. Bu, "yaygın kullanılan bir araç" demek değil. Kütüphane deneysel sürümde olduğu için üretim sistemine alınmadan önce kendi belgelerinizle test edilmesi, çıktıların arşiv ve imza gereksinimlerinize uyup uymadığının kontrol edilmesi gerekir. Sınırlarını bilerek kullanıldığında işe yarar bir araç; körü körüne bağlanılacak bir çözüm değil.
Projenin kendi sayfası htpo.8bit.tr adresinde, tarayıcıda deneme alanıyla birlikte; kaynak kodu github.com/crypto-su/htpo adresinde, npm paketi ise @8bit.tr/htpo adıyla yayında.

Teknoloji alanındaki diğer haberlerimize teknoloji sayfamızdan ulaşabilirsiniz. Sivas Cumhuriyet Üniversitesi'nin Millî Teknoloji Atölyesi'ni bu haberde, Avrupa Birliği'nin USB-C standardını ise bu haberde anlatmıştık.
Görsel: gazetesivas.com tasarım