Porównania

gPdf vs QuestPDF do generowania dokumentów w .NET

QuestPDF to świetna biblioteka PDF dla C#. gPdf to hostowane API na edge. Porównanie licencji, odpowiedzialności za środowisko, pracy z szablonami, zgodności, kodów kreskowych i sytuacji, w których lepiej pasuje każde rozwiązanie.

W skrócie

Wybór zależy od granicy zaufania. QuestPDF trzyma generowanie i dane dokumentu w procesie .NET, ale zespół sam odpowiada za fonty, kody kreskowe, skalowanie i zgodność. gPdf sprowadza generowanie do jednego wywołania HTTP z dowolnego języka programowania, lecz wymaga wysłania danych do zewnętrznego generatora i zależy od jego dostępności. Aplikacja .NET stawiająca na lokalną kontrolę, prywatność i offline zwykle wybierze QuestPDF; zespoły wielostackowe, które chcą PDF na edge z rozliczeniem za stronę, zwykle wybiorą gPdf.

Obok siebie

Kryterium gPdf QuestPDF Przewaga
Granica produktu
Właściwy wybór zależy od tego, czy chcecie kupić usługę, czy posiadać ścieżkę generowania w kodzie.
Hostowane API na edge dla JSON Render, Template Render i E-Invoice Render. Lokalna biblioteka C# / .NET instalowana z NuGet i wywoływana z kodu aplikacji. Remis
Główna integracja HTTPS POST z Node, Python, Go, .NET, Ruby, PHP, Java, workerów, zadań albo proxy interfejsu webowego. Fluent C# API z mocnym typowaniem, wsparciem IDE i konstrukcjami dobrze znanymi zespołom .NET. Remis
Miejsce uruchomienia Generator na edge w Cloudflare Workers; w Państwa stosie nie ma osobnej usługi PDF, konfiguracji fontów ani klastra wdrożeniowego. Działa tam, gdzie działa aplikacja .NET; zespół posiada CPU, pamięć, zależności natywne i pakietowe, wdrożenia, monitoring i skalowanie. gPdf
Praca z kodami kreskowymi Natywny element `barcode` dla formatów 1D, 2D i GS1 (`gs1128`, `sscc`, `gtin8/12/13/14`, `gs1datamatrix`, `gs1qrcode`, Aztec, PDF417, MaxiCode) z wbudowanym pozycjonowaniem tekstu czytelnego dla człowieka. Oficjalna dokumentacja integruje ZXing.Net — instalowany osobno z NuGet i generowany do SVG; identyfikatory zastosowania GS1 oraz ramkowanie FNC1 trzeba połączyć ręcznie. gPdf
Fonty i tekst wielojęzyczny Fonty należą do usługi: automatyczny wybór, tryby `prefer` / `strict` i dobór fontów zastępczych CJK per skrypt (KR, JP, SC); wywołujący nie pakują plików fontów do aplikacji. Dostarcza Lato i potrafi ładować fonty środowiskowe, fonty z katalogu wdrożenia oraz fonty własne z łańcuchami fontów zastępczych, ale własna dokumentacja ostrzega, że w większości wdrożeń chmurowych dostępnych jest mało fontów albo nie ma ich wcale. gPdf
Hasła i uprawnienia przy generowaniu
QuestPDF obsługuje te same siły szyfrowania oraz hasła użytkownika i właściciela, ale jako krok po wygenerowaniu pliku, a nie inline w czasie generowania.
Ustawiane bezpośrednio w żądaniu generowania — `settings.security` stosuje szyfrowanie AES-128/256, hasło otwarcia, hasło właściciela i osiem flag uprawnień w tym samym wywołaniu `/api/v1/pdf/render`. Najpierw generuje dokument, potem szyfruje go osobną Document Operation — `DocumentOperation.LoadFile(...).Encrypt(new Encryption256Bit { ... }).Save(...)`. gPdf
Iteracja szablonów gPdf Studio projektuje te same szablony JSON, które produkcja generuje przez `template_id + data`. QuestPDF Companion daje podgląd hot-reload, inspekcję hierarchii, narzędzia współrzędnych i nawigację do źródeł dokumentu C#. Remis
Cennik komercyjny
Ceny QuestPDF sprawdzono na publicznych stronach licencyjnych 2026-06-02. Zespoły .NET o dużym wolumenie powinny porównać licencję + hosting z ceną za strony w gPdf.
Plan Basic za 5 USD/miesiąc obejmuje 100 000 stron; nadwyżki zaczynają się od 0,00005 USD za stronę, z tą samą opublikowaną matematyką za stronę we wszystkich publicznych materiałach. Bezpłatnie na warunkach Community MIT poniżej 1 mln USD rocznego przychodu brutto; bezterminowe licencje komercyjne wskazują Professional za 999 USD dla maksymalnie 10 programistów oraz Enterprise za 2 999 USD dla całej organizacji bez liczenia programistów, plus lokalny podatek, każda z rokiem aktualizacji. Remis
Koszty serwerów i wdrożeń Dla publicznego API nie trzeba wdrażać floty serwerów; użycie jest rozliczane według planu i liczby stron. Warunki licencji komercyjnej reklamują nielimitowane projekty, serwery i wdrożenia; infrastruktura nadal pozostaje po stronie klienta. Remis
PDF/A i e-faktury Sześć profili PDF/A (1b/2b/3b/4/2u/3u) plus PDF/UA-1 oraz hostowany punkt końcowy Factur-X / ZUGFeRD z EN 16931 CII XML w PDF/A-3b, walidacją po stronie serwera i rezydencją danych w UE / globalnie. Mocne wsparcie PDF/A, PDF/UA-1 oraz ZUGFeRD 2.1 / Factur-X w kodzie; veraPDF i walidację Mustang podpinacie samodzielnie. Remis
Dokąd trafiają dane dokumentu
QuestPDF trzyma dane w procesie aplikacji; gPdf je przesyła, ale niczego nie zatrzymuje — logi operacyjne zawierają tylko status HTTP i czas trwania, nigdy ciał żądań.
Publiczne API przesyła dane żądania, ale generator działa bez retencji — JSON żądania żyje w izolacie Cloudflare Workers tylko na czas generowania (zwykle ~4 ms), nigdy nie jest przechowywany, logowany ani używany do trenowania. Rezydencja danych w UE / globalnie oraz on-prem / wdrożenie prywatne dodatkowo zawężają albo zamykają ekspozycję. Bajty powstają w procesie aplikacji; dane dokumentu nie przekraczają Państwa granicy zaufania i nie trafiają do strony trzeciej. Remis
Praca offline / odizolowany od sieci
QuestPDF działa offline bez konfiguracji; gPdf dochodzi do tego przez prywatne wdrożenie enterprise.
Publiczne API wymaga sieci; enterprise on-prem / wdrożenie prywatne uruchamia generator we własnej infrastrukturze dla pracy offline albo w środowisku odizolowanym od sieci. Działa lokalnie bez klucza licencyjnego, serwera aktywacji i wywołań sieciowych w czasie działania — typ licencji ustawia się jedną linią kodu w modelu opartym na zaufaniu. Remis
Operacje na istniejących PDF Generuje nowe PDF-y ze strukturalnych żądań; nie ładuje, nie scala, nie odszyfrowuje ani nie edytuje istniejących plików. Document Operations na istniejących PDF-ach: scalanie, zmiana kolejności / odwracanie / filtrowanie stron, nakładki, szyfrowanie i odszyfrowywanie 40/128/256-bitowe, załączniki, metadane XMP i linearyzacja do dostarczania przez web. QuestPDF
Wykresy i wizualizacja danych
Oba produkty polegają na bibliotece wykresów, aby zmienić dane w wykres; QuestPDF generuje go w dokumencie, gPdf umieszcza przygotowany SVG / PNG. QuestPDF prowadzi w wbudowanych wykresach, mapach i canvas.
Rysuje grafikę wektorową przez element `path` (dane ścieżki SVG) i kształty albo osadza wykres SVG / PNG wytworzony przez dowolną bibliotekę wykresów, ale nie ma wbudowanego silnika wykresów, map ani canvas API. Pełnoprawne integracje bibliotek wykresów (ScottPlot, LiveCharts, Microcharts), mapy Mapbox oraz SkiaSharp canvas API dla własnej grafiki. QuestPDF
Najlepszy domyślny przypadek użycia Produkcyjne dokumenty biznesowe współdzielone między zespołami: etykiety wysyłkowe, faktury, paragony, zestawienia, bilety i e-faktury. Aplikacje C#, które chcą lokalnego generowania dokumentów z pełną własnością kodu i bez zależności od usługi w czasie działania. Remis

Co kiedy wybrać

Wybierz gPdf, gdy
  • Generowanie PDF jest infrastrukturą współdzieloną przez kilka usług lub języków programowania, a nie funkcją należącą do jednej aplikacji .NET.
  • Chcecie usunąć generowanie PDF, zarządzanie fontami, geometrię kodów kreskowych i skalowanie regionalne ze stosu aplikacji.
  • Zespół chce zmieniać szablony jako `template_id + data`, a nie przez wdrożenia kodu C#.
  • Potrzebujecie generowania na edge blisko magazynów, klientów lub zadań serwerowych bez wdrażania usługi PDF .NET w każdym regionie.
  • Wolicie opublikowaną cenę za stronę i brak procesu zakupu licencji komercyjnej przed pierwszym generowaniem produkcyjnym.
Wybierz QuestPDF, gdy
  • Produkt jest przede wszystkim .NET, a kod C# jest naturalnym źródłem odniesienia dla układu dokumentu.
  • Dane dokumentów muszą pozostać w Państwa perymetrze, a prywatne wdrożenie enterprise gPdf nie wchodzi w grę.
  • Potrzebne jest generowanie offline albo w środowisku odizolowanym od sieci od razu, bez uruchamiania prywatnego wdrożenia generatora.
  • Generowanie leży na ścieżce synchronicznej krytycznej pod względem opóźnienia, gdzie wywołanie w procesie wygrywa z każdym pełnym przejściem przez sieć.
  • Potrzebne są operacje na istniejących PDF-ach — scalanie, ekstrakcja stron, nakładki, odszyfrowywanie albo załączniki — w tej samej bibliotece.
  • Generujecie wykresy, mapy albo własną grafikę SkiaSharp wewnątrz dokumentu (ScottPlot, LiveCharts, Microcharts, Mapbox).
  • Kwalifikujecie się do warunków Community MIT albo chcecie jednorazową licencję bezterminową, a lokalne utrzymanie generatora nie jest obciążeniem.
Możliwości

gPdf to API JSON do PDF działające na edge, zbudowane dla wysokowolumenowych faktur, dokumentów, etykiet wysyłkowych, kodów kreskowych, PDF/A i e-faktur. Renderowanie PDF w milisekundach na globalnej infrastrukturze edge — zoptymalizowane pod przewidywalne generowanie dokumentów klasy przemysłowej. Cennik na poziomie infrastruktury, wystarczająco niski, by zastąpić budowę i utrzymanie własnej infrastruktury PDF.

Możliwości

QuestPDF jest świetny, gdy granicą produktu jest C#

QuestPDF zasługuje na uczciwe porównanie. To nowoczesna biblioteka do generowania PDF dla programistów C#, z płynnym API, mocnym typowaniem, rozbudowaną dokumentacją, Companion App do podglądu i debugowania oraz modelem licencyjnym, który jak na PDF SDK jest wyjątkowo przejrzysty.

Pytanie produktowe nie brzmi “który z nich umie stworzyć PDF?”. Oba umieją. Przydatniejsze pytanie brzmi: gdzie ma mieszkać granica PDF — wewnątrz aplikacji .NET, która posiada układ, bajty i cykl życia dokumentu, czy jako warstwa infrastruktury wywoływana przez wiele produktów i języków.

Szybki przewodnik decyzyjny

  • Wybierz QuestPDF, gdy C# jest źródłem odniesienia dokumentu, aplikacja musi działać offline albo potrzebne są lokalne operacje na istniejących PDF-ach.
  • Wybierz gPdf, gdy jedna warstwa PDF ma obsługiwać Node, Python, Go, .NET, zadania i systemy regionalne przez to samo HTTP API.
  • Wybierz gPdf, gdy zmiany układu mają być rewizjami szablonu, a nie rebuildami C# i ponownymi wdrożeniami usługi.

Ta sama rodzina dokumentów, inny model własności

W QuestPDF aplikacja posiada generowanie PDF — to realna zaleta: C# pozostaje blisko modelu domenowego, działa i debuguje się lokalnie, bez wywołania w czasie działania do zewnętrznego API.

Koszt kompromisu jest taki, że zespół posiada też cały produkcyjny obszar:

  • CPU i pamięć do renderowania.
  • Odkrywanie fontów i dobór fontów zastępczych w każdym środowisku wdrożeniowym.
  • Integrację biblioteki kodów kreskowych oraz kontroli jakości wydruku.
  • Pakiety natywne i ryzyka wdrożeniowe dla wykresów albo integracji własnej grafiki.
  • Monitoring, ponowienia i obsługę awarii.
  • Wdrożenie regionalne, gdy użytkownicy lub magazyny są globalne.
  • Wdrożenia przy każdej zmianie układu dokumentu.

W gPdf ten obszar przesuwa się na zewnątrz: aplikacja wysyła DocumentRequest albo template_id + data, a usługa posiada generator, środowisko uruchomieniowe na edge, fonty, prymitywy kodów kreskowych, wyjście PDF/A i pakietowanie e-faktury. To mniej atrakcyjne, jeśli chcecie mieć każdy szczegół w C#, ale bardziej atrakcyjne, gdy generowanie PDF ma być warstwą narzędziową dostępną z dowolnego stosu.

Trzy kompromisy, na które hostowane API musi odpowiedzieć wprost

Większość argumentów “biblioteka kontra API” pomija trzy pytania, które architekt .NET zadaje jako pierwsze. Uczciwe porównanie wypowiada je głośno.

1. Dokąd trafiają dane dokumentu. Ta strona dotyczy głównie faktur, zestawień i e-faktur — dokumentów pełnych nazwisk, adresów, identyfikatorów podatkowych i kwot. W QuestPDF te bajty powstają wewnątrz Państwa procesu i go nie opuszczają. Publiczne API gPdf przesyła dane żądania do generatora, ale generator działa bez retencji: JSON żądania jest trzymany w izolacie V8 Cloudflare Workers wyłącznie przez czas generowania (zwykle ~4 ms) i zwalniany po zakończeniu odpowiedzi — nigdy nie jest przechowywany, logowany, próbkowany ani używany do trenowania; logi operacyjne ograniczają się do statusu HTTP i czasu trwania (security, DPA). Wybór rezydencji danych w UE / globalnie oraz enterprise on-prem / wdrożenie prywatne dodatkowo zawężają albo zamykają ekspozycję. Mimo to generowanie w procesie bez dodatkowej konfiguracji jest uzasadnionym — czasem decydującym — powodem, dla którego zespół finansowy albo sektora publicznego wybiera QuestPDF.

2. Tryb awarii. Biblioteka nie ma strony trzeciej, która może przestać działać; generowanie może zawieść tylko na infrastrukturze, którą już posiadacie. Hostowane API dodaje zależność od dostępności poza Państwa kontrolą. Właściwy sposób adopcji gPdf to traktowanie wywołań generowania jak każdego wywołania zewnętrznego — limit czasu, ponowienie, kolejka i najlepiej tryb awaryjny z degradacją. Jeśli generowanie dokumentów znajduje się na krytycznej ścieżce synchronicznej, porównujcie “utrzymujemy to samodzielnie” z “zależymy od dostępności dostawcy”.

3. Profil opóźnień. Generowanie w procesie to wywołanie funkcji bez sieci. Wywołanie hostowane to pełne przejście przez sieć. Dla zadań wsadowych i asynchronicznych to szum. Dla scenariusza “użytkownik klika, PDF musi pojawić się teraz” generowanie w procesie jest strukturalnie szybsze — punkty PoP na edge w gPdf skracają skok, ale nadal jest to TLS plus przejście przez sieć, podczas gdy QuestPDF to wywołanie metody.

Żaden z tych punktów nie czyni gPdf złym wyborem; definiują one kiedy jest wyborem właściwym — dla zespołów, których dane dokumentów mogą opuścić proces, których przepływy tolerują skok sieciowy i które wolą zależeć od dostępności dostawcy niż samodzielnie prowadzić flotę renderującą.

Licencjonowanie i model ceny

Publiczna strona licencyjna QuestPDF mówi, że licencja komercyjna jest wymagana tylko dla firm powyżej 1 mln USD rocznego przychodu brutto. Poziom Community jest bezpłatny na warunkach MIT dla uprawnionych osób fizycznych, projektów open source, organizacji non-profit i firm poniżej tego progu. Ta sama publiczna strona podaje dwa bezterminowe poziomy komercyjne: Professional za 999 USD plus lokalny podatek dla zespołów do 10 programistów oraz Enterprise za 2 999 USD plus lokalny podatek dla całej organizacji, bez liczenia programistów. Oba obejmują rok aktualizacji oraz nielimitowane projekty, serwery i wdrożenia, a licencja nie wygasa dla ostatniej otrzymanej wersji.

Model egzekwowania też jest wyjątkowo lekki. Licencję ustawia jedna linia — QuestPDF.Settings.License = LicenseType.Community; — bez klucza licencyjnego ani serwera aktywacji i, według własnej strony konfiguracji QuestPDF, bez wywołań sieciowych i bez danych opuszczających maszynę. To model oparty na zaufaniu: wybiera się poziom, do którego organizacja ma prawo. Nie ma rachunku od dostawcy za każdy dokument, a płatna licencja działa wszędzie, także w pełni offline.

gPdf wycenia bezpośrednio usługę generowania. Publiczny plan Basic zaczyna się od 5 USD/miesiąc za 100 000 stron, a nadwyżki od 0,00005 USD za stronę. To rachunek od dostawcy, ale usuwa też osobny projekt utrzymania generowania PDF: brak klastra renderowania, brak ścieżki wdrożenia NuGet, brak regionalnej puli rozgrzewkowej, brak pakietów fontów na aplikację i brak usługi PDF do patchowania.

Dlatego porównanie kosztu nie brzmi “USD 999 vs USD 5” — licencja to mała pozycja. Prawdziwe porównanie wygląda tak:

QuestPDF razem = licencja (jednorazowo) + własny hosting + czas inżynierów + dyżury
gPdf razem     = rachunek za strony (infrastruktura, fonty, skalowanie i edge w cenie)

Według publicznej matematyki za stronę nadwyżka gPdf kosztuje 0,05 USD za 1000 stron (50 USD za 1 mln, 500 USD za 10 mln). Jednorazowa licencja Enterprise za 2 999 USD zrówna się z takim rachunkiem dopiero w okolicach ~60 mln stron — i ta liczba pomija hosting QuestPDF oraz miesiące pracy inżynierów, które przesuwają realny punkt opłacalności jeszcze dalej na korzyść gPdf, chyba że już tanio utrzymujecie infrastrukturę generowania. Reguła praktyczna: jeśli trzeba zbudować i obsadzić usługę renderowania tylko po to, aby użyć biblioteki, gPdf zwykle wygrywa na całkowitym koszcie dużo wcześniej, niż rachunek za strony dogoni licencję; jeśli ta infrastruktura już istnieje i jest dla Państwa prawie darmowa, licencja bezterminowa wygrywa przy skali.

Proces pracy: Fluent C# kontra szablony

Fluent API QuestPDF dobrze pasuje, gdy programiści posiadają kształt dokumentu. Silne typowanie, łańcuchy metod, komponenty C# wielokrotnego użytku, refaktoryzacje w IDE i Companion App mają sens, gdy PDF jest częścią bazy kodu aplikacji.

gPdf pasuje do innego procesu pracy. Programiści nadal mogą pisać JSON bezpośrednio, ale systemy produkcyjne zwykle przechodzą w stronę szablonów. Projektant, operator albo inżynier poprawia układ w gPdf Studio. Zatwierdzony układ staje się szablonem, a usługa serwerowa dalej generuje przez template_id + data.

Ta różnica ma znaczenie, gdy dokument często się zmienia. Jeśli układ etykiety przewoźnika, faktury, listu przewozowego albo zestawienia się zmienia, gPdf może utrzymać środowisko uruchomieniowe bez zmian i przesunąć tylko szablon. W QuestPDF układ jest kodem C#, więc typowa ścieżka to zmiana kodu, test, build, wdrożenie i plan rollbacku.

Żaden proces nie jest uniwersalnie lepszy: QuestPDF optymalizuje pod programistów C#, którzy chcą dokument jako kod; gPdf pod szablony operacyjne współdzielone między systemami.

Compliance: oba produkty traktują standardy poważnie

To nie jest porównanie, w którym gPdf wygrywa, mówiąc, że konkurent nie ma funkcji zgodności. Aktualne publiczne materiały QuestPDF pokazują mocne wsparcie standardów, w tym PDF/A, PDF/UA-1 oraz e-fakturowanie EN 16931 przez przykład ZUGFeRD 2.1 / Factur-X oparty na standardzie UN/CEFACT Cross Industry Invoice (CII). Ten przykład ustawia PdfA = true, osadza factur-x.xml przez AddAttachment(), rozszerza dokument o metadane XMP i waliduje wynik przez veraPDF (dla PDF/A-3b) oraz Mustang Project (dla ZUGFeRD). To kompletna, uczciwa recepta — a Państwa pipeline posiada każdy jej krok.

gPdf pakuje te same standardy jako kontrakt API. JSON Render udostępnia sześć profili PDF/A (1b, 2b, 3b, 4, 2u, 3u) plus PDF/UA-1 przez settings.profile, Template Render używa tego samego modelu dokumentu, a E-Invoice Render udostępnia dedykowany punkt końcowy POST /api/v1/e-invoice/render, który tworzy pakiety Factur-X / ZUGFeRD PDF/A-3b z osadzonym EN 16931 CII XML. Różnica względem przepisu QuestPDF polega na tym, co usługa robi za Państwa: gPdf uruchamia PDF/A-3b i walidację e-faktury po stronie serwera, obsługuje synchroniczne inline albo dostarczanie obiektu po odpytywaniu i oferuje rezydencję danych w UE albo globalnie jako ustawienia żądania, a nie kroki, które samodzielnie składacie i utrzymujecie. QuestPDF pasuje, gdy walidacja ma mieszkać we własnym pipeline .NET; gPdf wtedy, gdy ma to być hostowany kontrakt współdzielony przez wiele systemów.

Fonty i kody kreskowe: liczy się wysiłek integracji

QuestPDF ma mocny model fontów. Dostarcza Lato 2.015 domyślnie, automatycznie ładuje fonty systemowe i fonty z katalogu wdrożenia, pozwala rejestrować własne fonty przez FontManager i obsługuje łańcuchy fontów zastępczych. To daje programistom kontrolę. Ale ta sama dokumentacja uczciwie opisuje haczyk: “in most cloud deployments, few or no fonts are available, which may lead to unexpected results,” i zaleca wyłączenie fontów środowiskowych oraz jawne rejestrowanie tego, czego potrzebujecie. Innymi słowy: w kontenerze albo środowisku bezserwerowym środowisko fontów jest Państwa obszarem planowania, dostarczenia i testów — a brakujący glif staje się znakiem zastępczym albo, po włączeniu CheckIfAllTextGlyphsAreAvailable, rzuconym wyjątkiem.

gPdf czyni fonty częścią granicy usługi. Generator zawiera zestaw wieloskryptowy — Latin, Greek, Cyrillic, Arabic, Hebrew, Bengali, Tamil, Thai, Vietnamese, monospace oraz CJK z doborem zastępczym per skrypt do Noto KR / JP / SC. Ciche wybory fontów rozwiązuje przez niejawny automatyczny wybór, a jawne przez prefer albo strict. Wywołujący nie dostarczają fontu CJK, nie rejestrują zasobów Noto w aplikacji .NET i nie stroją fontów zastępczych dla każdego celu wdrożenia. Wysyłają dane; generator posiada środowisko fontów, takie samo w każdym regionie.

Porównanie kodów kreskowych ma podobny kształt. Dokumentacja QuestPDF pokazuje solidne podejście z ZXing.Net generowanym jako wektorowe SVG i jasno mówi, że ZXing.Net nie jest częścią pakietu QuestPDF — instalujecie go z NuGet i podpinacie:

// QuestPDF: add the separate ZXing.Net package, encode, render to SVG, embed.
//   dotnet add package ZXing.Net
var writer = new ZXing.BarcodeWriterSvg {
    Format  = ZXing.BarcodeFormat.CODE_128,
    Options = new ZXing.Common.EncodingOptions { Width = 320, Height = 80 }
};
string svg = writer.Write("INV-2026-001").Content;
container.Svg(svg);
// GS1-128 with Application Identifiers and FNC1 framing is hand-wired on top.

W gPdf generowanie kodów kreskowych jest pełnoprawnym elementem schematu. Żądanie deklaruje format, treść, rozmiar fizyczny i opcjonalną linię czytelną dla operatora — a formaty GS1 są natywne, więc identyfikatory zastosowania trafiają prosto do content:

{
  "type": "barcode",
  "format": "gs1_128",
  "content": "(01)00012345678905(21)SN12345",
  "x": 12, "y": 60, "width": 80, "height": 18,
  "barcode_text": { "enabled": true, "position": "bottom" }
}

Dla jednej aplikacji .NET instalacja ZXing.Net i test wyjścia może być prosta. Dla wielu usług i szablonów — szczególnie w obciążeniach logistycznych i retailowych, które potrzebują GS1-128, SSCC, GTIN, GS1 DataMatrix albo GS1 QR z linią interpretacji czytelną dla operatora — utrzymanie zachowania kodów kreskowych w API dokumentu jest prostsze niż powtarzanie tego samego podpięcia ZXing w każdej usłudze.

Gdzie QuestPDF wyraźnie wygrywa

Poza pracą offline, trzymaniem danych dokumentów w Państwa perymetrze i sytuacją, w której kod PDF sam jest częścią produktu, QuestPDF ma dwa obszary możliwości, które leżą poza zakresem gPdf:

  • Operacje na istniejących PDF-ach. QuestPDF potrafi ładować istniejące pliki i scalać je, wybierać, przestawiać, odwracać i filtrować strony, nakładać warstwy, dodawać załączniki, ustawiać metadane XMP, linearyzować pod dostarczanie webowe oraz zarówno szyfrować, jak i odszyfrowywać z zabezpieczeniami 40/128/256-bitowymi. gPdf potrafi zabezpieczać hasłem i ograniczać uprawnieniami PDF-y, które generuje, ale nie otwiera, nie scala ani nie odszyfrowuje plików, których nie stworzył.
  • Wykresy, mapy i grafika własna. QuestPDF integruje biblioteki wykresów (ScottPlot, LiveCharts, Microcharts), osadza mapy Mapbox i udostępnia SkiaSharp canvas do dowolnego rysowania 2D. gPdf może rysować grafikę wektorową elementem path (dane ścieżki SVG) albo osadzić wykres SVG / PNG przygotowany wcześniej, ale nie ma wbudowanego silnika wykresów, map ani canvas — jeśli więc wykresy oparte na danych są centralne dla dokumentu, to narzędzie pozostaje po stronie QuestPDF.

Gdzie gPdf wyraźnie wygrywa

gPdf wygrywa, gdy organizacja nie chce, aby każdy zespół produktowy posiadał własną usługę PDF — stosy oparte na wielu językach programowania, globalne procesy oraz systemy ERP / OMS / WMS / ecommerce / fintech / ticketing, które generują dokumenty z danych strukturalnych, z szablonami zmieniającymi się niezależnie od kodu. W takich środowiskach lokalna biblioteka często zaczyna się tanio, a potem staje się flotą: jedna usługa na język programowania, jedna ścieżka wdrożenia na region, jeden plan fontów na kontener, jeden zestaw regresji kodów kreskowych na zespół. gPdf zmienia tę flotę w jeden kontrakt HTTP.

Architektura serverless pokazuje tę granicę najczytelniej. Na AWS Lambda, Cloud Run albo Azure Functions QuestPDF nadal działa wewnątrz aplikacji — Państwa zespół pakuje środowisko uruchomieniowe .NET, fonty, zależności natywne oraz wystarczające CPU / pamięć na szczytowe prace PDF i posiada zimne starty. gPdf już jest usługą generowania: funkcja wysyła małe żądanie template_id + data na edge i dostaje z powrotem bajty PDF, bez rozgrzewania generatora i bez workerów skalowanych w każdym regionie.

Jak wygląda migracja

Migracja z QuestPDF do gPdf nie jest przepisaniem linia po linii. To zmiana granicy: kod C#, który buduje PDF, staje się albo żądaniem dokumentu JSON, albo opublikowanym szablonem.

Przed / po — C# wywołanie budowania dokumentu sprowadza się do jednego HTTP POST (kliknij, aby rozwinąć)
- // Before: generate the PDF inside a .NET application.
- Document.Create(container =>
- {
-     container.Page(page =>
-     {
-         page.Size(PageSizes.A4);
-         page.Margin(30);
-         page.Header().Text("Invoice").FontSize(24).SemiBold();
-         page.Content().Column(column =>
-         {
-             column.Item().Text($"Invoice number: {invoice.Number}");
-             column.Item().Text($"Total: {invoice.Total:C}");
-         });
-     });
- })
- .GeneratePdf("invoice.pdf");
+
+ // After: render through the shared gPdf template from C#.
+ using System.Net.Http.Headers;
+ using System.Net.Http.Json;
+
+ using var client = new HttpClient();
+ client.DefaultRequestHeaders.Authorization =
+     new AuthenticationHeaderValue("Bearer", key);
+
+ var response = await client.PostAsJsonAsync(
+     "https://api.gpdf.com/api/v1/template-render",
+     new {
+         template_id = "invoice-v2",
+         data = new {
+             invoice_number = invoice.Number,
+             total = invoice.Total,
+             currency = invoice.Currency
+         }
+     });
+
+ response.EnsureSuccessStatusCode();
+ byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();

Po przesunięciu tej granicy zmiany układu mogą stać się rewizjami szablonów zamiast wdrożeniami aplikacji. Aplikacja nadal posiada dane biznesowe i decyzje dotyczące procesu; gPdf posiada warstwę generowania.

Nota o cenach i źródłach

Informacje o QuestPDF na tej stronie sprawdzono 2026-06-02 w oficjalnych źródłach QuestPDF: License and Pricing, License configuration, Features Overview, Companion App features, Barcodes, Font management oraz ZUGFeRD example. Ceny i strony funkcji mogą się zmieniać; zespoły zakupowe powinny ponownie sprawdzić stronę dostawcy przed decyzją zakupową. QuestPDF i powiązane znaki należą do ich właścicieli, a to porównanie nie jest przez nich zatwierdzone.

Powiązane scenariusze generowania PDF

Zespoły porównujące QuestPDF i gPdf zwykle rozstrzygają, czy PDF ma pozostać lokalnym kodem C#, czy wspólną usługą dla wielu systemów. Dla wariantu API warto zobaczyć API JSON do PDF, API PDF faktur, API etykiet wysyłkowych, API PDF/A, API Factur-X oraz API kodów kreskowych GS1.

FAQ

Czy gPdf zastępuje QuestPDF?

Nie. gPdf zastępuje potrzebę utrzymywania usługi generowania PDF dla ustrukturyzowanych dokumentów biznesowych. QuestPDF pozostaje mocną lokalną biblioteką C#, gdy PDF ma być generowany wewnątrz aplikacji.

Czy QuestPDF jest bezpłatny?

Publiczna strona licencyjna QuestPDF mówi, że poziom Community jest bezpłatny na warunkach MIT dla uprawnionych osób fizycznych, projektów open source, organizacji non-profit i firm poniżej 1 mln USD rocznego przychodu brutto. Firmy powyżej tego progu potrzebują bezterminowej licencji komercyjnej: Professional za 999 USD plus lokalny podatek dla maksymalnie 10 programistów albo Enterprise za 2 999 USD plus lokalny podatek dla całej organizacji, każda z rokiem aktualizacji.

Czy gPdf może generować wykresy albo mapy jak QuestPDF?

Nie jako wbudowany silnik. QuestPDF integruje biblioteki wykresów (ScottPlot, LiveCharts, Microcharts), mapy Mapbox i SkiaSharp canvas generujące grafikę w dokumencie. gPdf nadal może rysować wykresy wektorowe elementem path (akceptuje dane ścieżki SVG) i kształtami albo osadzać SVG / PNG wytworzone przez dowolną bibliotekę wykresów jako image. Różnica polega na tym, że QuestPDF liczy i generuje wykres w procesie, a w gPdf przygotowujecie grafikę wykresu, który gPdf umieszcza. Jeśli wykresy oparte na danych albo mapy są kluczowe dla dokumentu, QuestPDF jest lepszym wyborem.

Który produkt jest tańszy?

To zależy od granicy. QuestPDF może być tańszy dla zespołów .NET kwalifikujących się do warunków Community albo już utrzymujących infrastrukturę generowania. gPdf może być tańszy, gdy alternatywą jest budowa, hosting i utrzymanie usługi PDF dla wielu produktów albo regionów.

Czy gPdf przechowuje albo loguje dane moich dokumentów?

Nie. JSON wysyłany do gPdf i PDF zwracany przez gPdf nie są przechowywane. Każde żądanie jest obsługiwane wewnątrz pojedynczego izolatu V8 Cloudflare Workers, trzymane w pamięci tylko przez czas generowania — zwykle około 4 ms — i zwalniane po zakończeniu strumienia odpowiedzi; gPdf nie przechowuje, nie loguje, nie próbkuje ani nie trenuje na treści DocumentRequest. Logi operacyjne przechowują tylko status HTTP i czas trwania przez 30 dni i nie zawierają ciał żądań. Zobacz security policy, privacy policy i DPA. Dla obciążeń, które w ogóle nie mogą przesyłać danych, on-prem / wdrożenie prywatne utrzymuje je w Państwa perymetrze.

Czy QuestPDF może działać bez dostępu do internetu?

Tak. Strona konfiguracji licencji QuestPDF mówi, że nie ma klucza licencyjnego ani serwera aktywacji, a obliczenia są wykonywane lokalnie. To jeden z najjaśniejszych powodów, aby wybrać QuestPDF.

Czy gPdf może generować dowolne układy C# QuestPDF?

Nie. gPdf nie wykonuje kodu układu C#. Migracja oznacza przełożenie kształtu dokumentu na żądanie JSON gPdf albo zapisany szablon gPdf.