jsPDF hafif tarayıcı export’ları için çok iyidir
jsPDF popülerdir çünkü gerçek bir ürün problemini çözer: backend servisi çalıştırmadan tarayıcı içinde PDF oluşturmak. Bir developer metin, çizgi, görsel ve basit tablo çizebilir, sonra aynı sayfadan download başlatabilir. Prototipler, küçük admin ekranları, yerel makbuzlar ve offline PWA’ler için güçlü bir seçenektir.
Ürün sorusu, bu tarayıcı sınırının nerede doğru sınır olmaktan çıktığıdır. PDF müşteriler tarafından taranan, arşivlenen, email ile gönderilen veya başka bir sisteme teslim edilen iş belgesi olduğunda iş artık sadece “dosya çizmek” değildir. Font yönetimi, barkod doğruluğu, mobil stabilite, deterministik çıktı ve bazen PDF/A ya da e-fatura packaging’e dönüşür.
Aynı PDF çıktısı, farklı ürün sınırı
jsPDF ile frontend uygulaması renderer’dır. Her tarayıcı sekmesi library’yi, custom fontları, ara görselleri, barkod çıktısını ve final PDF byte’larını bellekte tutar. Library faturası sıfır kalır; ama production sorumluluğu her kullanıcı cihazına taşınır.
gPdf ile tarayıcı veya backend yapılandırılmış DocumentRequest ya da template_id + data request’i gönderir. gPdf render environment’ı, bundled fontları, barkod geometrisini ve edge’de binary PDF üretimini sahiplenir. Uygulama data ve şablon logic’inden sorumludur; PDF engine’den değil.
Ürün uyumu: offline export vs operasyonel belgeler
PDF yerel bir kolaylık özelliğiyse jsPDF seçin: küçük export butonu, basit Latin-only makbuz, dashboard snapshot veya ağ bağlantısı olmadan çalışması gereken PWA.
PDF operasyonel workflow’un parçasıysa gPdf seçin: kargo etiketleri, depo tag’leri, faturalar, biletler, ekstreler, gümrük formları ve sınır ötesi makbuzlar. Bu belgeler her cihazda aynı çıktıyı ister; o anki tarayıcı sekmesinin güvenle birleştirebildiği şeyi değil.
Maliyet modeli: ücretsiz library vs sahip olunan production yüzeyi
jsPDF’in açık fiyat avantajı vardır: library open source’tur ve tarayıcı CPU’su cloud faturasındaki bir satır kalemi değildir. Küçük bir internal feature için bu en ucuz yol olabilir.
Production cost kütüphane’nin çevresindeki işte görünür:
- CJK destekli font dosyaları veya üretilmiş base64 font modülleri.
- Barkod encoding ve conversion library’leri.
- Tarayıcıya özgü memory ve download bug’ları.
- Scanner ve termal printer için print QA.
- Desktop, iOS Safari, Android WebView ve embedded browser’lar genelinde regression testleri.
gPdf bunu kullanım faturasına çevirir. Public Basic plan 100.000 sayfa için 5 ABD doları/ay’dan başlar; standard overage sayfa başına 0,00005 ABD dolarıdır. Bu vendor maliyetidir; ama her frontend bundle ve her kullanıcı cihazını production PDF service gibi davranmaya zorlama ihtiyacını kaldırır.
CJK maliyeti yalnızca dosya boyutu değildir
İlk sert sınır CJK metindir: Chinese, Japanese ve Korean.
jsPDF’in built-in standard PDF fontları basit Latin output için kullanışlıdır, ama her Unicode glyph’i kapsamaz. Belge CJK metin içerdiğinde uygulama bu glyph’leri gerçekten içeren bir fonta ihtiyaç duyar. Pratikte browser-side implementation’lar sıkça TTF dosyası paketler, bunu base64 JavaScript modülüne çevirir veya PDF üretmeden önce font data fetch eder.
Bu maliyet iki kez ödenir: önce daha büyük frontend payload olarak, sonra PDF üretilirken tarayıcı belleği olarak. Mobile’da aynı sekme web app’i, fontu, barkod buffer’larını, görselleri ve final PDF byte’larını aynı anda tutabilir.
gPdf bu işi server-side tutar. Tarayıcı structured JSON gönderir; renderer Latin, Greek, Cyrillic, CJK, Arabic, Devanagari, Bengali, Thai ve monospace text’i kapsayan bundled fontlar arasından seçer. 2 KB’lık order payload’u 12 MB’lık font delivery yoluna dönüşmek zorunda değildir.
Barkod maliyeti: encoding kolay, baskı güvenilirliği zordur
Lojistik, ecommerce, üretim, sağlık, ticketing ve retail workflow’larında barkod görünen metinden daha önemli olabilir. İnsan order number’ı okur; operasyon Code 128, GS1-128, QR, DataMatrix veya PDF417 okur.
jsPDF ile barkod üretimi genellikle ayrı bir ürün kararıdır. Ekipler jsPDF’i başka bir encoder ile birleştirir, barkodu SVG, canvas veya image olarak render eder, sonra sonucu PDF’e yerleştirir. Kupon QR code veya proof of concept için çalışır.
Basılı barkod operasyonel olarak kritik hale geldiğinde kırılganlaşır:
- Canvas barkod yanlış resolution’da rasterized olabilir.
- Ölçeklenmiş image barları, modülleri veya quiet zone’ları bulanıklaştırabilir.
- Tarayıcı, CSS transform veya export yolu final physical size’ı değiştirebilir.
- Farklı barkod formatları farklı library veya conversion path isteyebilir.
- 203 DPI termal printer küçük sizing hatalarını hızlıca açığa çıkarır.
gPdf barkodları belge elementi olarak ele alır. Request type: "barcode", format, payload ve milimetre cinsinden physical size belirtir. Renderer desteklenen 1D ve 2D formatlar için PDF içine vektör barkod geometrisi yazar; böylece metin, shape, tablo, image ve barkodlar tek coordinate system içinde kalır.
Studio ve şablon iteration
jsPDF code-first’tür. Layout değişikliği genellikle JavaScript içinde drawing command’ları, pozisyonları, font registration’ı, image conversion’ı ve barkod placement’ı düzenlemek demektir.
gPdf aynı API-first workflow’u destekler, ama gPdf Studio ile PDF layout için ücretsiz görsel designer ekler. Ekipler metin, görsel, tablo, shape, header, footer ve barkod ekleyip sürükleyebilir; sonra tasarımı template_id + data üretimine bağlayabilir. Etiket, fatura veya makbuz formatı sık değiştiğinde ve PDF uzmanı olmayan kişiler layout’a katılmak zorunda olduğunda bu önemlidir.
Mobil tarayıcılar ağır PDF işi için yanlış yerdir
Client-side PDF generation ucuz görünür çünkü server faturası sıfırdır. Maliyet kullanıcı cihazına taşınır.
Desktop’ta bu sorun olmayabilir. Mobil tarayıcılarda production document sekmeyi zorlayabilir: CJK font data, base64 görseller, canvas buffer’ları, barkod image’ları, generated PDF byte’ları ve çalışan uygulama aynı anda bellek için yarışır. iOS Safari ve düşük bellekli Android cihazlar developer laptop’ından daha az toleranslıdır.
Üretimi gPdf’e offload etmek problemin şeklini değiştirir. Tarayıcı küçük JSON request oluşturur, binary response bekler ve bitmiş PDF’i indirir. Kullanıcı sekmesi artık font manager, barkod renderer, layout engine ve binary PDF writer olmak zorunda değildir.
jsPDF ne zaman hâlâ doğru seçimdir
jsPDF’i tutmak için güçlü nedenler vardır.
Kullanıcı offline export yapmak zorundaysa jsPDF daha iyi uyumdur. Data cihazdan hiç çıkmamalıysa tarayıcı-side generation daha temiz privacy boundary verir. Belge küçük, Latin-only ve arada bir kullanılıyorsa API getirmek operasyon maliyetine değmeyebilir. Prototipler ve internal tool’lar için jsPDF çoğu zaman tam olarak en hızlı yoldur.
Karar, çıktı operasyonel workflow’un parçası olduğunda değişir: taranması gereken kargo etiketi, arşivlenmesi gereken fatura, verify edilmesi gereken bilet veya CJK isimlerini doğru render etmesi gereken sınır ötesi order belgesi. O noktada “tarayıcıda PDF generate etmek“ten çok “aynı production PDF’i güvenilir generate etmek” önemlidir.
Geçiş şekli
Geçiş “bir function call’u değiştirmek” değildir. Imperative tarayıcı drawing’den yapılandırılmış belge request’ine geçmektir.
- // Before: browser-side drawing with jsPDF plus extra font/barcode setup.
- import { jsPDF } from "jspdf";
- import JsBarcode from "jsbarcode";
-
- const doc = new jsPDF({ unit: "mm", format: [100, 150] });
- // Load a CJK-capable TTF and register it before drawing CJK text.
- doc.addFileToVFS("NotoSansCJK-Regular.ttf", base64Font);
- doc.addFont("NotoSansCJK-Regular.ttf", "NotoSansCJK", "normal");
- doc.setFont("NotoSansCJK");
- doc.text("跨境订单 / Cross-border order", 6, 10);
-
- // Generate a barcode separately, then place it into the PDF.
- JsBarcode(canvas, "PDN0003507278", { format: "CODE128" });
- doc.addImage(canvas.toDataURL("image/png"), "PNG", 6, 72, 72, 20);
- doc.save("label.pdf");
+
+ // After: send one structured DocumentRequest to gPdf.
+ const res = await fetch("https://api.gpdf.com/api/v1/pdf/render", {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${KEY}`,
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ settings: {
+ defaults: {
+ text: {
+ font_family: "NotoSans-Regular",
+ font_mode: "prefer",
+ font_size: 9,
+ color: "#111827"
+ }
+ }
+ },
+ pages: [{
+ width: 100,
+ height: 150,
+ elements: [
+ {
+ type: "text",
+ x: 6,
+ y: 8,
+ content: "跨境订单 / Cross-border order",
+ style: { width: 88, font_size: 12, font_weight: "bold" }
+ },
+ {
+ type: "barcode",
+ x: 6,
+ y: 70,
+ width: 72,
+ height: 18,
+ format: "code128",
+ content: "PDN0003507278",
+ barcode_text: { enabled: true, position: "bottom", offset: 1 }
+ },
+ {
+ type: "barcode",
+ x: 80,
+ y: 8,
+ width: 14,
+ height: 14,
+ format: "qrcode",
+ content: "https://track.example/PDN0003507278",
+ barcode_text: { enabled: false, position: "bottom" }
+ }
+ ]
+ }]
+ })
+ });
+ const pdf = await res.arrayBuffer();
Önemli değişim ownership’tır. jsPDF ile web app CJK font yolunu, barkod üretim yolunu, tarayıcı memory profile’ını ve export behavior’ını sahiplenir. gPdf ile uygulama data ve şablonu sahiplenir; edge renderer belge mechanics’ini sahiplenir.
İlgili PDF üretim senaryoları
PDF’in tarayıcıda mı yoksa kontrollü bir serviste mi üretilmesi gerektiğini değerlendiriyorsanız JSON to PDF API, fatura PDF API, kargo etiketi API, PDF içinde GS1 barkod, PDF/A API ve Factur-X API sayfaları aynı karar alanındadır.
FAQ
jsPDF ücretsiz mi?
Library’nin kendisi open source’tur. Production maliyeti çevredeki iştir: CJK fontları, barkod library’leri, tarayıcı QA, print QA ve belleği tükenen cihazlara destek.
gPdf tüm jsPDF use case’lerini değiştirir mi?
Hayır. Offline tarayıcı export ve local-only belgeler hâlâ jsPDF’in doğal alanıdır. gPdf, kontrollü renderer’ın API call’a değdiği production belgeleri içindir.
Barkod maliyeti neden ayrı anlatılıyor?
Çünkü ekranda iyi görünen barkod ölçekleme, rasterization veya termal baskı sonrası yine fail edebilir. Operasyonel belgeler sadece görünen pattern değil scanner reliability ister.
Ayrıca bakın
- gPdf API referansı - DocumentRequest, barkod elementleri, font fallback ve render endpoint’leri.
- PDF’de vektör vs raster barkod - barkod geometrisinin baskıdan sonra neden önemli olduğu.
- PDF içinde GS1 barkod - etiket odaklı barkod boyutlandırma detayları.
- Mühendisler için PDF/A ve Factur-X - archival ve e-fatura requirements PDF pipeline’a ne zaman girer.