Порівняння

gPdf vs jsPDF: PDF у браузері чи API на edge

jsPDF популярний для швидких PDF у браузері, але CJK-шрифти, точність штрихкодів, пам'ять мобільних пристроїв і вимоги відповідності змінюють архітектуру.

Коротко

jsPDF — практичний вибір для легких PDF, створених у браузері: прототипів, квитанцій і офлайн-експортів. Компроміс з'являється, коли бойовому документу потрібні CJK-текст, штрихкоди, готові до сканування, стабільність на мобільних пристроях або вивід для вимог відповідності. gPdf переносить роботу зі шрифтами, штрихкодами, макетом і генерацією PDF у контрольований API на edge, тому браузер надсилає дані й отримує готовий PDF.

Поруч

Критерій gPdf jsPDF Перевага
Де виконується рендеринг
jsPDF цінний саме тим, що працює на клієнті; ця ж властивість переносить CPU і пам'ять на кожен пристрій користувача.
V8-ізоляти Cloudflare Workers на edge Вкладка браузера користувача gPdf
Обробка CJK-шрифтів
Стандартні PDF-шрифти jsPDF не покривають UTF-8/CJK-текст; командам доводиться завантажувати або пакувати відповідні TTF-дані.
Вбудована підстановка для спрощеної китайської, японської та корейської Потрібен власний шрифт із потрібними гліфами gPdf
Навантаження вебзастосунку для CJK Без CJK-файла шрифту в пакеті вебзастосунку Часто багатомегабайтні файли шрифтів або згенеровані base64-модулі шрифтів gPdf
Модель генерації штрихкодів Нативний елемент `barcode` для 1D- і 2D-форматів Зазвичай разом з окремою бібліотекою штрихкодів, SVG/canvas або шляхом через зображення gPdf
Точність друку штрихкодів
Для транспортних етикеток, складських етикеток і квитків сканерам важливі геометрія друку, тихі зони й розмір модуля, а не лише вигляд на екрані.
Векторні штрихи й модулі всередині PDF Залежить від того, як браузерний штрихкод конвертується й масштабується в PDF gPdf
Стабільність мобільного браузера Рендеринг винесений із вкладки Генерація PDF, шрифти, зображення й штрихкоди споживають пам'ять клієнта gPdf
Офлайн-підтримка Потребує мережевого доступу до API Може працювати повністю офлайн у PWA або локальному застосунку jsPDF
PDF/A та електронні рахунки Профілі PDF/A і ендпоінт Factur-X/ZUGFeRD Зазвичай не підходить для архівних або гібридних пакетів електронних рахунків gPdf
Публічна ціна Basic за 5 USD/міс. включає 100 000 сторінок; перевищення ліміту починається з 0,00005 USD за сторінку Бібліотека з відкритим кодом; рахунку постачальника за саму бібліотеку немає jsPDF
Вартість володіння в бойовій експлуатації API володіє шрифтами, рендерингом штрихкодів, середовищем виводу й оновленнями Ваш вебзастосунок володіє пакуванням шрифтів, конвертацією штрихкодів, мобільною пам'яттю та перевіркою в браузерах gPdf
Найкращий базовий сценарій Структуровані бойові документи: транспортні етикетки, рахунки, квитанції, квитки, виписки Малі браузерні експорти, прототипи, офлайн-документи й прості PDF з латиницею Нарівно

Що коли обрати

Обирайте gPdf, коли
  • Документи містять китайський, японський або корейський текст, і ви не хочете відправляти великі файли шрифтів у кожен браузер.
  • Ви генеруєте критичні для сканування етикетки або квитки з Code 128, GS1-128, QR, DataMatrix, PDF417 чи іншими штрихкодами.
  • Користувачі часто працюють у мобільних браузерах, і генерація PDF не має змагатися зі сторінкою за пам'ять.
  • Потрібні PDF/A, Factur-X, ZUGFeRD або один контрольований рендерер для виводу, чутливого до аудиту.
  • Той самий PDF-процес має викликатися з вебінтерфейсу, серверної частини, фонових задач та інтеграцій.
Обирайте jsPDF, коли
  • Потрібен повністю офлайн-експорт із браузера або PWA без серверного виклику.
  • PDF малий, лише з латиницею і генерується зрідка одним користувачем.
  • Ви прототипуєте і хочете найшвидший спосіб малювати текст, лінії та зображення в JavaScript.
  • Дані не мають залишати пристрій користувача навіть для короткого запиту рендера.
  • Ви готові володіти пакуванням шрифтів, кодуванням штрихкодів, масштабуванням і крайовими випадками пам'яті браузера.
Можливості

gPdf — це API JSON у PDF на edge для великих обсягів PDF рахунків, документів, транспортних етикеток, штрихкодів, PDF/A та виведення електронних рахунків. PDF-рендеринг мілісекундного класу в глобальній edge-мережі — оптимізований для передбачуваного створення промислових документів. Ціни рівня інфраструктури, достатньо низькі, щоб замінити побудову й експлуатацію власної PDF-інфраструктури.

Можливості

jsPDF чудовий для легких браузерних експортів

jsPDF популярний, бо розв’язує реальну продуктову задачу: створити PDF у браузері без запуску серверного сервісу. Розробник може намалювати текст, лінії, зображення і прості таблиці, а потім запустити завантаження з тієї самої сторінки. Для прототипів, невеликих адмінок, локальних квитанцій і офлайн PWA це сильна відповідність.

Продуктове питання в тому, де ця браузерна межа перестає бути правильною. Коли PDF стає бізнес-документом, який клієнт сканує, архівує, надсилає електронною поштою або передає в іншу систему, робота вже не зводиться до “намалювати файл”. Це керування шрифтами, точність штрихкодів, стабільність на мобільних пристроях, детермінований вивід і іноді пакування PDF/A або електронного рахунку.

Той самий PDF, інша межа продукту

З jsPDF ваш вебзастосунок стає рендерером. Кожна вкладка браузера має тримати бібліотеку, будь-які власні шрифти, проміжні зображення, результат генерації штрихкодів і фінальні PDF-байти. Це лишає рахунок за бібліотеку нульовим, але переносить бойову відповідальність на кожен пристрій користувача.

З gPdf браузер або серверна частина надсилає структурований DocumentRequest або запит template_id + data. gPdf володіє середовищем рендера, вбудованими шрифтами, геометрією штрихкодів і бінарною генерацією PDF на edge. Застосунок відповідає за дані й логіку шаблонів, а не за PDF-рушій.

Відповідність продукту: офлайн-експорт проти операційних документів

Обирайте jsPDF, коли PDF — локальна зручна функція: невелика кнопка експорту, проста квитанція лише з латиницею, знімок панелі або PWA, що має працювати без мережі.

Обирайте gPdf, коли PDF є частиною операційного процесу: транспортні етикетки, складські ярлики, рахунки, квитки, виписки, митні форми й транскордонні квитанції. Таким документам потрібен однаковий вивід на всіх пристроях, а не те, що поточна вкладка браузера змогла безпечно зібрати.

Модель вартості: безкоштовна бібліотека проти відповідальності за експлуатацію

Бібліотека jsPDF має очевидну цінову перевагу: сама бібліотека з відкритим кодом, а CPU браузера не є рядком у вашому хмарному рахунку. Для невеликої внутрішньої функції це може бути найдешевший шлях.

Вартість бойової експлуатації з’являється в роботі навколо бібліотеки:

  • CJK-сумісні файли шрифтів або згенеровані base64-модулі шрифтів.
  • Бібліотеки кодування й конвертації штрихкодів.
  • Помилки пам’яті та завантаження, специфічні для браузерів.
  • Перевірка друку для сканерів і термопринтерів.
  • Регресійні тести в десктопних браузерах, iOS Safari, Android WebView і вбудованих браузерах.

gPdf перетворює це на рахунок за використання. Публічний Basic plan починається з 5 USD/міс. за 100 000 сторінок, зі стандартним перевищенням ліміту від 0,00005 USD за сторінку. Це витрата на постачальника, але вона прибирає потребу змушувати кожен пакет вебзастосунку і кожен пристрій користувача поводитися як бойовий PDF-сервіс.

Вартість CJK — це не лише розмір файла

Перша жорстка межа — CJK-текст: китайська, японська й корейська.

Вбудовані стандартні PDF-шрифти jsPDF корисні для простого виводу латиниці, але не покривають кожен Unicode-гліф. Коли документ містить CJK-текст, застосунку потрібен шрифт, у якому ці гліфи справді є. На практиці браузерні реалізації часто пакують TTF-файл, конвертують його в base64-модуль JavaScript або завантажують дані шрифту перед генерацією PDF.

Ця вартість сплачується двічі: спершу як більше навантаження вебзастосунку, потім знову як пам’ять браузера під час генерації PDF. На мобільному пристрої та сама вкладка може одночасно тримати вебзастосунок, шрифт, буфери штрихкодів, зображення і фінальні PDF-байти.

gPdf тримає цю роботу на боці сервісу. Браузер надсилає структурований JSON; рендерер вибирає з вбудованих шрифтів для латиниці, грецької, кирилиці, CJK, арабської, деванагарі, бенгальської, тайської та моноширинного тексту. Дані замовлення на 2 КБ не мають перетворюватися на шлях доставки шрифтів у 12 МБ.

Вартість штрихкодів: закодувати легко, надійно надрукувати складніше

У логістиці, електронній комерції, виробництві, охороні здоров’я, квиткових сервісах і роздрібній торгівлі штрихкод може бути важливішим за видимий текст. Людина читає номер замовлення; операційний процес читає Code 128, GS1-128, QR, DataMatrix або PDF417.

З jsPDF генерація штрихкодів зазвичай є окремим продуктовим рішенням. Команди поєднують jsPDF з іншим енкодером, рендерять штрихкод у SVG, canvas або зображення, а потім вставляють результат у PDF. Це працює для купонного QR-коду або прототипу.

Стає крихким, коли надрукований штрихкод критичний для операцій:

  • Canvas-штрихкод може бути растеризований із неправильною роздільною здатністю.
  • Масштабоване зображення може розмити штрихи, модулі або тихі зони.
  • Браузер, CSS-трансформація або шлях експорту можуть змінити фінальний фізичний розмір.
  • Різні формати штрихкодів можуть потребувати різних бібліотек або шляхів конвертації.
  • Термопринтери на 203 DPI швидко показують дрібні помилки розміру.

gPdf трактує штрихкоди як елементи документа. Запит задає type: "barcode", format, дані штрихкоду і фізичний розмір у міліметрах. Рендерер записує векторну геометрію штрихкоду всередині PDF для підтримуваних 1D- і 2D-форматів, тому текст, фігури, таблиці, зображення й штрихкоди лишаються в одній системі координат.

Studio та ітерації шаблонів

jsPDF починається з коду. Зміна макета зазвичай означає редагування команд малювання, позицій, реєстрації шрифтів, конвертації зображень і розміщення штрихкодів у JavaScript.

gPdf підтримує той самий процес від API, але додає gPdf Studio як безкоштовний візуальний дизайнер PDF-макета. Команди можуть додавати й перетягувати текст, зображення, таблиці, фігури, колонтитули та штрихкоди, а потім під’єднати дизайн до генерації через template_id + data. Це важливо, коли формат транспортної етикетки, рахунку або квитанції часто змінюється, а до макета мають долучатися не лише PDF-спеціалісти.

Мобільні браузери — погане місце для важкої PDF-роботи

Клієнтська генерація PDF здається дешевою, бо серверний рахунок дорівнює нулю. Вартість переходить на пристрій користувача.

На десктопі це може бути нормально. У мобільних браузерах бойовий документ може сильно навантажити вкладку: CJK-дані шрифту, base64-зображення, canvas-буфери, зображення штрихкодів, згенеровані PDF-байти й активний застосунок одночасно змагаються за пам’ять. iOS Safari і Android-пристрої з малим обсягом пам’яті менш поблажливі, ніж ноутбук розробника.

Перенесення генерації в gPdf змінює форму проблеми. Браузер збирає невеликий JSON-запит, чекає бінарну відповідь і завантажує готовий PDF. Вкладка користувача більше не має бути менеджером шрифтів, рендерером штрихкодів, рушієм макета і бінарним компонентом запису PDF.

Коли jsPDF усе ще правильний вибір

Є сильні причини лишитися з jsPDF.

Якщо користувач має експортувати офлайн, jsPDF підходить краще. Якщо дані взагалі не можуть залишати пристрій, браузерна генерація є чистішою межею приватності. Якщо документ малий, лише з латиницею і використовується зрідка, операційна вартість введення API може не виправдати себе. Для прототипів і внутрішніх інструментів jsPDF часто справді найшвидший шлях.

Рішення змінюється, коли вивід стає частиною операційного процесу: транспортна етикетка має скануватися, рахунок має архівуватися, квиток має перевірятися, а транскордонний документ замовлення має коректно рендерити CJK-імена. У цей момент “згенерувати PDF у браузері” менш важливо, ніж “надійно згенерувати той самий бойовий PDF”.

Форма міграції

Міграція — це не “замінити один виклик функції”. Це перехід від імперативного малювання в браузері до структурованого запиту документа.

- // 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();

Важлива зміна — володіння. З jsPDF ваш вебзастосунок володіє шляхом CJK-шрифтів, шляхом генерації штрихкодів, профілем пам’яті браузера і поведінкою експорту. З gPdf застосунок володіє даними й шаблоном; edge-рендерер володіє механікою документа.

Пов’язані сценарії генерації PDF

Команди, які порівнюють jsPDF і gPdf, часто також шукають генерацію CJK PDF, альтернативи браузерній генерації PDF, API для штрихкодів у PDF, безпечну для мобільних генерацію PDF, офлайн-експорт PDF, API JSON у PDF, PDF рахунків, PDF квитків, PDF транспортних етикеток і візуальний дизайн PDF-шаблонів.

FAQ

jsPDF безкоштовний?

Сама бібліотека з відкритим кодом. Вартість бойової експлуатації — це робота навколо: CJK-шрифти, бібліотеки штрихкодів, перевірка в браузерах, перевірка друку і підтримка пристроїв, у яких закінчується пам’ять.

Чи замінює gPdf усі сценарії jsPDF?

Ні. Офлайн-експорт із браузера й документи, які мають лишатися тільки локально, досі є природною територією jsPDF. gPdf — для бойових документів, де контрольований рендерер вартий API-виклику.

Чому вартість штрихкодів згадується окремо?

Бо штрихкод, який добре виглядає на екрані, може не скануватися після масштабування, растеризації або термодруку. Операційним документам потрібна надійність сканування, а не лише видимий візерунок.

Див. також