เปรียบเทียบ

gPdf vs QuestPDF สำหรับงานสร้างเอกสารใน .NET

QuestPDF เป็นไลบรารี PDF สำหรับ C# ที่ยอดเยี่ยม ส่วน gPdf เป็น API บน Edge แบบโฮสต์ บทความนี้เทียบไลเซนส์ ความรับผิดชอบตอนรันจริง วิธีปรับเทมเพลต compliance บาร์โค้ด และกรณีที่แต่ละตัวเหมาะกว่า

สรุปย่อ

เลือกให้ตรงกับขอบเขตความเชื่อถือของระบบคุณ QuestPDF สร้างเอกสารและเก็บข้อมูลในเอกสารไว้ใน process ของ .NET เอง แลกกับการที่ทีมต้องดูแลฟอนต์ บาร์โค้ด การขยายระบบ และงาน compliance เอง gPdf เปลี่ยนการสร้าง PDF ให้เป็น HTTP call เดียวที่ภาษาใดก็เรียกได้ แลกกับการส่งข้อมูลเอกสารไปยังตัวเรนเดอร์ของผู้ให้บริการและพึ่งความพร้อมใช้งานของบริการนั้น แอป .NET ที่ให้ความสำคัญกับการควบคุมในเครื่อง ความเป็นส่วนตัวของข้อมูล และการทำงานออฟไลน์มักเลือก QuestPDF; ทีมหลายภาษาที่ต้องการโครงสร้างพื้นฐาน PDF บน Edge พร้อมราคาตามจำนวนหน้ามักเลือก gPdf

เคียงข้างกัน

เกณฑ์ gPdf QuestPDF ได้เปรียบ
ขอบเขตผลิตภัณฑ์
ตัวเลือกที่ถูกต้องขึ้นกับว่าคุณต้องการซื้อบริการ หรือเป็นเจ้าของเส้นทางโค้ดเรนเดอร์เอง
API บน Edge แบบโฮสต์สำหรับ JSON Render, Template Render และ E-Invoice Render ไลบรารี C# / .NET ในเครื่อง ติดตั้งจาก NuGet และเรียกจากโค้ดแอปพลิเคชัน เสมอ
การเชื่อมต่อหลัก HTTPS POST จาก Node, Python, Go, .NET, Ruby, PHP, Java, worker, job หรือ proxy ฝั่ง frontend Fluent C# API พร้อม strong typing, การช่วยเหลือจาก IDE และโครงสร้าง .NET ที่ทีมคุ้นเคย เสมอ
ตำแหน่งรันไทม์ ตัวเรนเดอร์บน Cloudflare Workers Edge; ไม่ต้องมีบริการ PDF ชุดติดตั้งฟอนต์ หรือคลัสเตอร์ deploy ในระบบของคุณ รันได้ทุกที่ที่แอป .NET ของคุณรัน; ทีมของคุณดูแล CPU, memory, dependency แบบ native/package, การ deploy, monitoring และการขยายระบบ gPdf
กระบวนการบาร์โค้ด องค์ประกอบ `barcode` ในตัว ครอบคลุมบาร์โค้ด 1D, 2D และรูปแบบ GS1 (`gs1128`, `sscc`, `gtin8/12/13/14`, `gs1datamatrix`, `gs1qrcode`, Aztec, PDF417, MaxiCode) พร้อมตำแหน่งข้อความที่อ่านด้วยตา เอกสารทางการใช้ ZXing.Net โดยติดตั้งจาก NuGet แยกต่างหากแล้วเรนเดอร์เป็น SVG; ตัวระบุแอปพลิเคชัน GS1 และกรอบ FNC1 ต้องต่อเอง gPdf
ฟอนต์และข้อความหลายภาษา บริการดูแลชุดฟอนต์ให้เอง พร้อมการเลือกอัตโนมัติแบบไม่ต้องระบุ โหมด `prefer` / `strict` และ CJK fallback แยกตามสคริปต์ (KR, JP, SC); ฝั่งที่เรียกไม่ต้องแพ็กไฟล์ฟอนต์เข้าแอป มี Lato และโหลดฟอนต์จาก environment, โฟลเดอร์ deploy และฟอนต์กำหนดเองพร้อม fallback chain ได้ แต่เอกสารของตัวเองเตือนว่า deployment บน cloud ส่วนใหญ่มีฟอนต์น้อยมากหรือไม่มีเลย gPdf
รหัสผ่านและสิทธิ์ตอนสร้าง
QuestPDF รองรับระดับการเข้ารหัสและรหัสผ่าน user / owner แบบเดียวกัน แต่ทำหลังสร้างไฟล์แล้ว ไม่ใช่ตั้งพร้อมคำขอเรนเดอร์
ตั้งค่าในคำขอเรนเดอร์ได้เลย - `settings.security` ใช้ AES-128/256, รหัสผ่านเปิดไฟล์/เจ้าของไฟล์ และ permission flag 8 แบบใน call `/api/v1/pdf/render` เดียว สร้างไฟล์ก่อน แล้วเข้ารหัสผ่าน Document Operation แยก: `DocumentOperation.LoadFile(...).Encrypt(new Encryption256Bit { ... }).Save(...)` gPdf
การปรับเทมเพลต gPdf Studio ออกแบบ JSON template ชุดเดียวกับที่ระบบจริงเรนเดอร์ผ่าน `template_id + data` QuestPDF Companion มี preview แบบ hot-reload, เครื่องมือตรวจ hierarchy, เครื่องมือพิกัด และการนำทางกลับไปยัง source สำหรับเอกสาร C# เสมอ
ราคาเชิงพาณิชย์
ตรวจราคา QuestPDF จากหน้าไลเซนส์สาธารณะเมื่อ 2026-06-02 ทีม .NET ปริมาณสูงควรเทียบไลเซนส์ + hosting กับราคาตามหน้าของ gPdf
Basic 5 USD/เดือน รวม 100,000 หน้า; ส่วนเกินเริ่มที่ 0.00005 USD ต่อหน้า และตัวเลขต่อหน้าตรงกันทุกหน้าสาธารณะ ฟรีภายใต้เงื่อนไข Community MIT เมื่อรายได้รวมต่อปีต่ำกว่า 1 ล้าน USD; ไลเซนส์เชิงพาณิชย์แบบถาวรระบุ Professional 999 USD (นักพัฒนาไม่เกิน 10 คน) และ Enterprise 2,999 USD (ทั้งองค์กร ไม่จำกัดจำนวนนักพัฒนา) บวกภาษีท้องถิ่น แต่ละแบบมีอัปเดต 1 ปี เสมอ
ค่าเซิร์ฟเวอร์และการ deploy public API ไม่ต้อง deploy server fleet; ค่าใช้จ่ายคิดตาม plan และจำนวนหน้า เงื่อนไขไลเซนส์เชิงพาณิชย์ระบุว่าใช้ได้ไม่จำกัด project, server และ deployment; โครงสร้างพื้นฐานยังเป็นของลูกค้าเอง เสมอ
PDF/A และ e-invoice PDF/A 6 profile (1b/2b/3b/4/2u/3u) พร้อม PDF/UA-1 และ endpoint Factur-X / ZUGFeRD แบบโฮสต์ที่ฝัง EN 16931 CII XML ใน PDF/A-3b, ตรวจสอบฝั่ง server และเลือกถิ่นที่อยู่ข้อมูล EU / global ได้ รองรับ PDF/A, PDF/UA-1 และ ZUGFeRD 2.1 / Factur-X ในโค้ดได้ดี; คุณต้องต่อ veraPDF และ Mustang validation เอง เสมอ
ข้อมูลเอกสารไปที่ไหน
QuestPDF เก็บข้อมูลไว้ใน process; gPdf ส่งข้อมูลออกไปแต่ไม่เก็บไว้ - operational log มีเพียง HTTP status และระยะเวลา ไม่มี request body
public API ส่งข้อมูลคำขอไปยังตัวเรนเดอร์ แต่ตัวเรนเดอร์ไม่เก็บข้อมูล - request JSON อยู่ใน Cloudflare Workers isolate เฉพาะช่วงเรนเดอร์ (ทั่วไปประมาณ 4 ms) ไม่ถูกจัดเก็บ บันทึก log หรือใช้ฝึกโมเดล; ตัวเลือกถิ่นที่อยู่ข้อมูล EU / global และ on-prem / private deployment ช่วยลดหรือปิดช่องเปิดนี้ได้ ไฟล์ถูกสร้างใน process; ข้อมูลเอกสารไม่ข้ามขอบเขตความเชื่อถือของคุณไปยังบุคคลที่สาม เสมอ
ทำงานออฟไลน์ / แยกจากเครือข่าย
QuestPDF ใช้ออฟไลน์ได้ทันทีแทบไม่ต้องตั้งค่า; gPdf ไปถึงขอบเขตเดียวกันผ่าน enterprise private deployment
public API ต้องมี network access; enterprise on-prem / private deployment รันตัวเรนเดอร์ในโครงสร้างพื้นฐานของคุณเองสำหรับงานออฟไลน์หรือสภาพแวดล้อมแยกจากเครือข่าย รันในเครื่องได้โดยไม่มี license key, activation server หรือ network call ตอนรันจริง; license type ตั้งด้วยโค้ด 1 บรรทัดตามระบบความซื่อสัตย์ เสมอ
การทำงานกับ PDF เดิม สร้าง PDF ใหม่จากคำขอแบบมีโครงสร้าง; ไม่โหลด รวมไฟล์ ถอดรหัส หรือแก้ไขไฟล์เดิม Document Operations บน PDF เดิม: รวมไฟล์ จัดลำดับ/ย้อนลำดับ/กรองหน้า overlay, เข้ารหัสและถอดรหัส 40/128/256-bit, แนบไฟล์, XMP metadata และ web linearization QuestPDF
กราฟและการแสดงข้อมูล
ทั้งสองฝั่งพึ่ง charting library เพื่อเปลี่ยนข้อมูลเป็นกราฟ; QuestPDF เรนเดอร์ในเอกสาร ส่วน gPdf วาง SVG / PNG ที่คุณสร้างไว้ล่วงหน้า QuestPDF นำเรื่อง charting, แผนที่ และ canvas ในตัว
วาดงาน vector ผ่าน element `path` (SVG path data) และ shape หรือฝังกราฟ SVG / PNG ที่สร้างจาก charting library ใดก็ได้ แต่ไม่มี charting engine, แผนที่ หรือ canvas API ในตัว มีการเชื่อมต่อ chart ระดับ first-class (ScottPlot, LiveCharts, Microcharts), Mapbox maps และ SkiaSharp canvas API สำหรับ custom graphics QuestPDF
กรณีใช้งานเริ่มต้นที่เหมาะที่สุด เอกสารธุรกิจสำหรับ production ที่หลายทีมใช้ร่วมกัน: label, invoice, receipt, statement, ticket และ e-invoice แอป C# ที่ต้องการสร้างเอกสารในเครื่อง เป็นเจ้าของโค้ดเต็มที่ และไม่พึ่งบริการภายนอกตอนรันจริง เสมอ

เลือกอันไหนเมื่อใด

เลือก gPdf เมื่อ
  • การสร้าง PDF เป็นโครงสร้างพื้นฐานที่หลายบริการหรือหลายภาษาใช้ร่วมกัน ไม่ใช่ feature ของแอป .NET เพียงตัวเดียว
  • คุณต้องการย้ายงานเรนเดอร์ PDF การดูแลฟอนต์ เรขาคณิตของบาร์โค้ด และการขยายตามภูมิภาคออกจาก application stack
  • ทีมต้องการให้เทมเพลตเปลี่ยนผ่าน `template_id + data` แทนการ deploy โค้ด C#
  • คุณต้องการ Edge rendering ใกล้คลังสินค้า ลูกค้า หรือ backend job โดยไม่ deploy บริการ PDF บน .NET ในทุกภูมิภาค
  • คุณต้องการราคาต่อหน้าที่เผยแพร่ชัดเจน และไม่อยากผ่านขั้นตอนจัดซื้อไลเซนส์เชิงพาณิชย์ก่อน render production ครั้งแรก
เลือก QuestPDF เมื่อ
  • ผลิตภัณฑ์ของคุณเป็น .NET-first และโค้ด C# คือแหล่งอ้างอิงหลักตามธรรมชาติของเลย์เอาต์เอกสาร
  • ข้อมูลเอกสารต้องอยู่ในขอบเขตระบบของคุณ และ enterprise private gPdf deployment ไม่อยู่ในแผน
  • คุณต้องการสร้างเอกสารแบบออฟไลน์หรือแยกจากเครือข่ายได้ทันที โดยไม่ตั้ง private render deployment
  • การสร้างเอกสารอยู่บนเส้นทาง synchronous ที่ latency สำคัญมาก และ call ใน process ชนะ network round-trip ทุกแบบ
  • คุณต้องการทำงานกับ PDF เดิม เช่น รวมไฟล์ ดึงหน้า overlay ถอดรหัส หรือแนบไฟล์ ภายใน library เดียวกัน
  • คุณเรนเดอร์กราฟ แผนที่ หรือ custom SkiaSharp graphics ภายในเอกสาร (ScottPlot, LiveCharts, Microcharts, Mapbox)
  • คุณเข้าเงื่อนไข Community MIT หรืออยากได้ไลเซนส์ถาวรแบบจ่ายครั้งเดียว และการดูแลตัวเรนเดอร์ในเครื่องไม่ใช่ภาระ
ความสามารถ

gPdf คือ API แปลง JSON เป็น PDF แบบ Edge-native สำหรับใบแจ้งหนี้ เอกสาร ฉลากการจัดส่ง บาร์โค้ด PDF/A และ e-invoice ปริมาณสูง การเรนเดอร์ PDF ระดับมิลลิวินาทีบน Edge ระดับโลก — ปรับแต่งเพื่อการสร้างเอกสารระดับอุตสาหกรรมที่คาดเดาได้ ราคาต้นทุนระดับโครงสร้างพื้นฐาน ต่ำพอที่จะทดแทนการสร้างและดูแลโครงสร้างพื้นฐาน PDF ของคุณเอง

ความสามารถ

QuestPDF ยอดเยี่ยมเมื่อ C# คือขอบเขตผลิตภัณฑ์

QuestPDF ควรถูกเปรียบเทียบอย่างให้เกียรติ มันเป็นไลบรารีสร้าง PDF สมัยใหม่สำหรับนักพัฒนา C# มี fluent API, strong typing, เอกสารละเอียด, Companion App สำหรับ preview และ debug และโมเดลไลเซนส์ที่ชัดเจนมากสำหรับ PDF SDK

คำถามไม่ใช่ “ตัวไหนสร้าง PDF ได้” เพราะทั้งคู่ทำได้ คำถามที่มีประโยชน์คือขอบเขตของ PDF ควรอยู่ตรงไหน: ในแอป .NET ที่เป็นเจ้าของเลย์เอาต์ ไฟล์ และวงจรชีวิตทั้งหมด หรือในบริการโครงสร้างพื้นฐานที่หลายผลิตภัณฑ์และหลายภาษาเรียกใช้

คู่มือเลือกแบบเร็ว

  • เลือก QuestPDF เมื่อ C# คือแหล่งอ้างอิงหลักของเอกสาร แอปต้องรันออฟไลน์ หรือคุณต้องทำงานกับ PDF เดิมในเครื่อง
  • เลือก gPdf เมื่อ PDF layer เดียวควรให้บริการ Node, Python, Go, .NET, job และระบบแต่ละภูมิภาคผ่าน HTTP API เดียวกัน
  • เลือก gPdf เมื่อการเปลี่ยนเลย์เอาต์ควรเป็น revision ของเทมเพลต ไม่ใช่การ rebuild C# และ redeploy service ใหม่

เอกสารตระกูลเดียวกัน แต่โมเดลความเป็นเจ้าของต่างกัน

เมื่อใช้ QuestPDF แอปเป็นเจ้าของการสร้าง PDF นี่เป็นจุดแข็งจริง: C# อยู่ใกล้ domain model, รันและ debug ได้ในเครื่อง และไม่มี call ไปยัง API ภายนอกตอนรันจริง

ข้อแลกเปลี่ยนคือทีมของคุณต้องดูแลพื้นผิว production ที่เหลือด้วย:

  • CPU และ memory สำหรับการเรนเดอร์
  • การค้นหาฟอนต์และ fallback ในแต่ละสภาพแวดล้อม deploy
  • การเชื่อมต่อไลบรารีบาร์โค้ดและ print QA
  • package แบบ native และงาน deploy สำหรับ charting หรือ custom graphics integration
  • monitoring, retry และการจัดการความล้มเหลว
  • การ deploy ตามภูมิภาคเมื่อผู้ใช้หรือคลังสินค้ากระจายทั่วโลก
  • rollout ทุกครั้งที่เลย์เอาต์เอกสารเปลี่ยน

เมื่อใช้ gPdf พื้นที่ความรับผิดชอบนั้นย้ายไปอยู่ที่บริการ แอปส่ง DocumentRequest หรือ template_id + data แล้วบริการดูแลตัวเรนเดอร์ runtime บน Edge ฟอนต์ primitive ของบาร์โค้ด output แบบ PDF/A และแพ็กเกจ e-invoice ให้ วิธีนี้ไม่น่าสนใจถ้าคุณต้องการควบคุมทุกอย่างใน C# แต่น่าสนใจมากขึ้นถ้าการสร้าง PDF ควรเป็นชั้นบริการกลางที่ทุก stack เรียกใช้ได้

trade-off 3 ข้อที่ API แบบโฮสต์ต้องตอบตรง ๆ

pitch แบบ “library vs API” จำนวนมากข้ามคำถามแรก ๆ ที่สถาปนิก .NET จะถาม การเปรียบเทียบที่แฟร์ต้องตอบให้ชัด

1. ข้อมูลเอกสารไปที่ไหน หน้านี้พูดถึงใบแจ้งหนี้ ใบแจ้งยอด และ e-invoice เป็นหลัก ซึ่งเป็นเอกสารที่มีชื่อ ที่อยู่ เลขภาษี และยอดเงิน เมื่อใช้ QuestPDF ไฟล์เหล่านั้นถูกสร้างใน process ของคุณและไม่ออกไปไหน public gPdf API ส่งข้อมูลคำขอไปยังตัวเรนเดอร์ แต่ตัวเรนเดอร์ไม่เก็บข้อมูล: request JSON อยู่ใน Cloudflare Workers V8 isolate เฉพาะช่วงเรนเดอร์ (ทั่วไปประมาณ 4 ms) และถูกปล่อยเมื่อ response จบ ไม่ถูกจัดเก็บ บันทึก log สุ่มตัวอย่าง หรือใช้ฝึกโมเดล โดย operational log จำกัดอยู่ที่ HTTP status และระยะเวลา (security, DPA) การเลือกถิ่นที่อยู่ข้อมูล EU / global และ enterprise on-prem / private deployment ช่วยลดหรือปิดช่องเปิดนี้ได้มากขึ้น ถึงอย่างนั้น การเก็บงานสร้างเอกสารไว้ใน process โดยไม่ต้องตั้งค่าเพิ่มก็เป็นเหตุผลที่ถูกต้อง และบางครั้งเป็นเหตุผลตัดสิน สำหรับทีมการเงินหรือภาครัฐที่เลือก QuestPDF

2. รูปแบบความล้มเหลว library ไม่มีผู้ให้บริการรายที่สามให้ล่ม งานสร้างเอกสารจะล้มได้เฉพาะบนโครงสร้างพื้นฐานที่คุณเป็นเจ้าของอยู่แล้ว API แบบโฮสต์เพิ่ม dependency ด้านความพร้อมใช้งานที่คุณควบคุมไม่ได้ วิธีใช้ gPdf ที่ถูกต้องคือปฏิบัติกับ render call เหมือน external call อื่น: timeout, retry, queue และถ้าเป็นไปได้ควรมี fallback แบบลดระดับบริการ ถ้างานสร้างเอกสารอยู่บนเส้นทาง synchronous ที่สำคัญ ให้ชั่งน้ำหนักระหว่าง “ดูแลเอง” กับ “พึ่ง uptime ของผู้ให้บริการ”

3. โปรไฟล์เวลาแฝง in-process generation คือ function call ไม่มี network ส่วน hosted call คือ network round-trip สำหรับ batch และ async job เรื่องนี้มักเป็น noise แต่สำหรับ “ผู้ใช้คลิกแล้ว PDF ต้องขึ้นทันที” in-process ย่อมเร็วกว่าในเชิงโครงสร้าง gPdf Edge PoPs ทำให้ hop สั้น แต่ก็ยังเป็น TLS + round-trip ส่วน QuestPDF คือ method call

สิ่งเหล่านี้ไม่ได้ทำให้ gPdf เป็นตัวเลือกที่ผิด แต่มันบอกว่า gPdf เหมาะเมื่อไร: ทีมที่ยอมให้ข้อมูลเอกสารออกจาก process ได้, กระบวนการทำงานทน network hop ได้ และทีมอยากพึ่ง uptime ของผู้ให้บริการมากกว่าดูแลชุดบริการเรนเดอร์เอง

ไลเซนส์และโมเดลราคา

หน้าไลเซนส์สาธารณะของ QuestPDF ระบุว่า commercial license จำเป็นเฉพาะบริษัทที่มีรายได้รวมต่อปีเกิน 1 ล้านดอลลาร์สหรัฐ Community tier ฟรีสำหรับบุคคล, open-source project, non-profit และบริษัทที่ต่ำกว่า threshold นี้ ภายใต้ MIT terms หน้าเดียวกันระบุ commercial tier แบบถาวร 2 แบบ: Professional 999 ดอลลาร์สหรัฐบวกภาษีท้องถิ่นสำหรับทีมไม่เกิน 10 developers และ Enterprise 2,999 ดอลลาร์สหรัฐบวกภาษีท้องถิ่น ครอบคลุมทั้งองค์กรโดยไม่คิดจำนวน developers ทั้งคู่รวมอัปเดต 1 ปี ใช้ได้ไม่จำกัด project, server และ deployment และไลเซนส์ไม่หมดอายุสำหรับ version ล่าสุดที่ได้รับ

โมเดล enforcement ก็เบาเป็นพิเศษ ตั้ง license ด้วยบรรทัดเดียว: QuestPDF.Settings.License = LicenseType.Community; ไม่มี license key ไม่มี activation server และตามหน้า configuration ของ QuestPDF เอง ไม่มี network call และไม่มีข้อมูลออกจากเครื่อง เป็นระบบอาศัยความซื่อสัตย์: คุณเลือก tier ที่ตัวเองเข้าเงื่อนไข ไม่มีบิลผู้ให้บริการต่อเอกสาร และไลเซนส์แบบชำระเงินรันได้ทุกที่ รวมถึงออฟไลน์เต็มรูปแบบ

gPdf ตั้งราคาบริการเรนเดอร์โดยตรง public Basic plan เริ่มที่ 5 ดอลลาร์สหรัฐ/เดือนสำหรับ 100,000 หน้า โดยส่วนเกินเริ่มที่ 0.00005 ดอลลาร์สหรัฐ/หน้า นี่เป็นบิลผู้ให้บริการ แต่ก็ตัดงานดูแลระบบสร้าง PDF ออกไป: ไม่มี render cluster, ไม่มี deployment path ผ่าน NuGet, ไม่มี warm pool รายภูมิภาค, ไม่มี font package ต่อแอป และไม่มีบริการ PDF ให้ patch

ดังนั้นการเทียบต้นทุนไม่ใช่ “999 ดอลลาร์สหรัฐ vs 5 ดอลลาร์สหรัฐ” เพราะไลเซนส์เป็นเพียงบรรทัดเล็กกว่า การเทียบจริงคือ:

QuestPDF total = license (one-time) + your hosting + your engineer-time + on-call
gPdf total     = page bill (infrastructure, fonts, scaling, and edge included)

จากเลขต่อหน้าสาธารณะ ส่วนเกินของ gPdf คือ 0.05 ดอลลาร์สหรัฐต่อ 1,000 หน้า (50 ดอลลาร์สหรัฐต่อ 1 ล้านหน้า, 500 ดอลลาร์สหรัฐต่อ 10 ล้านหน้า) Enterprise license แบบจ่ายครั้งเดียว 2,999 ดอลลาร์สหรัฐจะคุ้มเท่ากับบิลนี้ใกล้ 60 ล้านหน้า แต่เลขนี้ยังไม่รวม hosting และ engineer-months ของ QuestPDF ซึ่งมักดันจุดคุ้มทุนจริงให้เข้าข้าง gPdf มากขึ้น เว้นแต่คุณมีโครงสร้างพื้นฐานเรนเดอร์ที่ถูกมากอยู่แล้ว หลักจำง่ายคือ ถ้าคุณต้อง build และจัดคนดูแลบริการเรนเดอร์เพื่อใช้ library, gPdf มักชนะด้าน total cost นานก่อนที่บิลต่อหน้าจะไล่ทันค่าไลเซนส์ แต่ถ้า infrastructure นั้นมีอยู่แล้วและแทบไม่มีต้นทุนเพิ่ม ไลเซนส์ถาวรจะชนะเมื่อ scale สูงมาก

กระบวนการพัฒนา: Fluent C# หรือเทมเพลต

Fluent API ของ QuestPDF เหมาะมากเมื่อนักพัฒนาเป็นเจ้าของรูปทรงเอกสาร strong typing, method chain, component C# ที่ใช้ซ้ำได้, refactor ใน IDE และ Companion App ล้วนเข้าท่าเมื่อ PDF เป็นส่วนหนึ่งของ codebase ของแอป

gPdf เหมาะกับกระบวนการอีกแบบ นักพัฒนายังเขียน JSON โดยตรงได้ แต่ระบบจริงมักขยับไปสู่เทมเพลต นักออกแบบ ทีมปฏิบัติการ หรือ engineer ปรับเลย์เอาต์ใน gPdf Studio เลย์เอาต์ที่อนุมัติแล้วกลายเป็นเทมเพลต แล้ว backend เรนเดอร์ต่อด้วย template_id + data

ความต่างนี้สำคัญเมื่อเอกสารเปลี่ยนบ่อย ถ้าเลย์เอาต์ของป้ายขนส่ง ใบแจ้งหนี้ packing slip หรือ statement เปลี่ยน gPdf ทำให้ runtime คงเดิมและขยับเฉพาะเทมเพลตได้ เมื่อใช้ QuestPDF เลย์เอาต์คือโค้ด C# เส้นทางปกติจึงเป็น code change, test, build, deploy และ rollback plan

ไม่มีกระบวนการไหนดีกว่าเสมอ QuestPDF เหมาะกับ C# developer ที่ต้องการ document as code; gPdf เหมาะกับเทมเพลตปฏิบัติการที่ใช้ร่วมกันข้ามระบบ

Compliance: ทั้งสองผลิตภัณฑ์จริงจัง

นี่ไม่ใช่การเปรียบเทียบที่ gPdf ชนะด้วยการบอกว่าคู่แข่งไม่มี compliance feature เอกสารสาธารณะปัจจุบันของ QuestPDF ระบุการรองรับมาตรฐานที่แข็งแรง รวมถึง PDF/A, PDF/UA-1 และ e-invoicing ตาม EN 16931 ผ่านตัวอย่าง ZUGFeRD 2.1 / Factur-X บนมาตรฐาน UN/CEFACT Cross Industry Invoice (CII) ตัวอย่างนั้นตั้ง PdfA = true, ฝัง factur-x.xml ด้วย AddAttachment(), เพิ่ม XMP metadata และตรวจด้วย veraPDF (สำหรับ PDF/A-3b) กับ Mustang Project (สำหรับ ZUGFeRD) เป็น recipe ที่ครบและตรงไปตรงมา และ pipeline ของคุณเป็นเจ้าของทุกขั้น

gPdf แพ็กมาตรฐานเดียวกันเป็น API contract JSON Render เปิด PDF/A 6 profile (1b, 2b, 3b, 4, 2u, 3u) พร้อม PDF/UA-1 ผ่าน settings.profile, Template Render ใช้ document model เดียวกัน และ E-Invoice Render มี endpoint เฉพาะ POST /api/v1/e-invoice/render ที่สร้างแพ็กเกจ Factur-X / ZUGFeRD PDF/A-3b พร้อมฝัง EN 16931 CII XML ความต่างจาก recipe ของ QuestPDF คือบริการทำอะไรแทนคุณ: gPdf ตรวจ PDF/A-3b และ e-invoice ฝั่ง server, รองรับการส่งไฟล์กลับแบบ synchronous inline หรือแบบ polled object และให้ถิ่นที่อยู่ข้อมูล EU หรือ global เป็น request setting แทนขั้นตอนที่คุณต้องประกอบและดูแลเอง QuestPDF เหมาะเมื่อ validation ควรอยู่ใน .NET pipeline ของคุณ; gPdf เหมาะเมื่อมันควรเป็น hosted contract ที่หลายระบบใช้ร่วมกัน

ฟอนต์และบาร์โค้ด: แรงงานเชื่อมต่อคือการเปรียบเทียบจริง

QuestPDF มีโมเดลฟอนต์ที่ดี มัน ship Lato 2.015 เป็นค่าเริ่มต้น โหลดฟอนต์จากระบบและโฟลเดอร์ deploy อัตโนมัติ ให้ register custom font ผ่าน FontManager และรองรับ fallback chain สิ่งนี้ให้การควบคุมกับ developer แต่เอกสารเดียวกันก็พูดตรงถึงข้อควรระวัง: “in most cloud deployments, few or no fonts are available” และแนะนำให้ปิด environment fonts พร้อม register ฟอนต์ที่ต้องใช้เอง พูดอีกแบบคือบน container หรือ serverless target, สภาพแวดล้อมฟอนต์เป็นสิ่งที่คุณต้องวางแผน แพ็ก และทดสอบเอง glyph ที่หายอาจกลายเป็น placeholder character หรือถ้าเปิด CheckIfAllTextGlyphsAreAvailable ก็กลายเป็น exception

gPdf ทำให้ฟอนต์เป็นส่วนหนึ่งของขอบเขตบริการ ตัวเรนเดอร์ bundle ชุด multi-script: Latin, Greek, Cyrillic, Arabic, Hebrew, Bengali, Tamil, Thai, Vietnamese, monospace และ CJK พร้อม fallback แยกตาม script ไปยัง Noto KR / JP / SC การเลือกฟอนต์แบบเงียบใช้ implicit auto selection ส่วนการระบุชัดใช้ prefer หรือ strict ฝั่งที่เรียกไม่ต้อง ship CJK font, register Noto asset ในแอป .NET หรือจูน fallback แยกตามเป้าหมาย deploy เขาส่งข้อมูลมา; renderer ดูแลสภาพแวดล้อมฟอนต์ที่เหมือนกันทุกภูมิภาค

การเปรียบเทียบบาร์โค้ดมีรูปแบบคล้ายกัน เอกสารบาร์โค้ดของ QuestPDF แสดงแนวทางที่ดีด้วย ZXing.Net เรนเดอร์เป็น vector SVG และระบุชัดว่า ZXing.Net ไม่รวมอยู่ใน package ของ QuestPDF คุณต้องติดตั้งจาก NuGet และต่อเอง:

// 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.

เมื่อใช้ gPdf การสร้างบาร์โค้ดเป็น schema element ชั้นหนึ่ง request ระบุ format, content, ขนาดจริง และบรรทัดข้อความอ่านด้วยตาแบบ optional และรูปแบบ GS1 เป็น native ดังนั้นตัวระบุแอปพลิเคชัน (AI) ใส่ตรงใน 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" }
}

สำหรับแอป .NET ตัวเดียว การติดตั้ง ZXing.Net และทดสอบ output อาจง่ายพอ แต่สำหรับหลายบริการและหลายเทมเพลต โดยเฉพาะงานโลจิสติกส์และค้าปลีกที่ต้องใช้ GS1-128, SSCC, GTIN, GS1 DataMatrix หรือ GS1 QR พร้อมบรรทัด human-readable interpretation การย้ายพฤติกรรมบาร์โค้ดเข้า document API ดูแลง่ายกว่าการต่อ ZXing แบบเดิมซ้ำในทุกบริการ

จุดที่ QuestPDF ชนะชัดเจน

นอกเหนือจากการรันออฟไลน์และการเก็บข้อมูลเอกสารไว้ในขอบเขตระบบของคุณตามที่พูดไปแล้ว หากโค้ด PDF เองเป็นส่วนหนึ่งของผลิตภัณฑ์และทีมต้อง inspect, extend หรือเป็นเจ้าของเส้นทางเรนเดอร์ QuestPDF ยังมี capability 2 ส่วนที่อยู่นอกขอบเขตของ gPdf อย่างชัดเจน:

  • การทำงานกับ PDF เดิม QuestPDF โหลดไฟล์เดิมแล้วรวมไฟล์ เลือก/จัดลำดับ/ย้อนลำดับ/กรองหน้า ใส่ overlay แนบไฟล์ ตั้ง XMP metadata ทำ linearization สำหรับส่งผ่านเว็บ และทำได้ทั้งเข้ารหัสและถอดรหัสด้วย 40/128/256-bit security gPdf ใส่รหัสผ่านและจำกัดสิทธิ์ PDF ที่ตัวเองสร้างได้ แต่ไม่เปิด รวมไฟล์ หรือถอดรหัสไฟล์ที่ไม่ได้สร้าง
  • กราฟ แผนที่ และ custom graphics QuestPDF เชื่อมต่อ charting library (ScottPlot, LiveCharts, Microcharts), ฝัง Mapbox maps และเปิด SkiaSharp canvas สำหรับวาด 2D ได้ตามต้องการ gPdf วาด vector art ด้วย element path (SVG path data) หรือฝังกราฟ SVG / PNG ที่สร้าง upstream ได้ แต่ไม่มี charting engine, แผนที่ หรือ canvas ในตัว ดังนั้นถ้า data-driven charting เป็นแกนของเอกสาร tooling นั้นอยู่ฝั่ง QuestPDF

จุดที่ gPdf ชนะชัดเจน

gPdf ชนะเมื่อองค์กรไม่อยากให้ทุกทีมผลิตภัณฑ์ดูแลบริการ PDF ของตัวเอง: stack หลายภาษา กระบวนการระดับโลก และระบบ ERP / OMS / WMS / ecommerce / fintech / ticketing ที่เรนเดอร์เอกสารจากข้อมูลแบบมีโครงสร้าง โดยเทมเพลตเปลี่ยนแยกจากโค้ด ในสภาพแวดล้อมแบบนี้ local library มักเริ่มต้นถูก แต่ค่อย ๆ กลายเป็นชุดระบบกระจาย: หนึ่ง service ต่อภาษา หนึ่งเส้นทาง deploy ต่อภูมิภาค หนึ่งแผนฟอนต์ต่อ container และหนึ่งชุด regression ของบาร์โค้ดต่อทีม gPdf เปลี่ยนชุดระบบนี้เป็น HTTP contract เดียว

serverless ทำให้ขอบเขตชัดที่สุด บน AWS Lambda, Cloud Run หรือ Azure Functions, QuestPDF ยังรันอยู่ใน application ทีมของคุณต้องแพ็ก .NET runtime, ฟอนต์, native dependency และ CPU / memory ให้พอสำหรับ peak PDF work พร้อมรับผิดชอบ cold start เอง gPdf เป็น render service อยู่แล้ว: function POST request เล็ก ๆ template_id + data ไปยัง Edge และได้ PDF bytes กลับมา โดยไม่มี renderer ให้ warm หรือ worker รายภูมิภาคให้ scale

รูปแบบการย้าย

การย้ายจาก QuestPDF ไป gPdf ไม่ใช่การ rewrite ทีละบรรทัด แต่เป็นการเปลี่ยนขอบเขต: โค้ด C# ที่ build PDF กลายเป็น JSON document request หรือเทมเพลตที่ publish แล้ว

Before / after — call สร้างเอกสารใน C# ยุบเหลือ HTTP POST เดียว (คลิกเพื่อเปิด)
- // 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();

หลังขอบเขตย้ายแล้ว การเปลี่ยนเลย์เอาต์สามารถเป็น revision ของเทมเพลตแทนการ deploy แอปใหม่ แอปยังเป็นเจ้าของข้อมูลธุรกิจและการตัดสินใจของกระบวนการ; gPdf เป็นเจ้าของการเรนเดอร์

บันทึกเรื่องราคาและแหล่งข้อมูล

ข้อมูล QuestPDF ในหน้านี้ตรวจเมื่อ 2026-06-02 จากแหล่งทางการของ QuestPDF: License and Pricing, License configuration, Features Overview, Companion App features, Barcodes, Font management และ ZUGFeRD example ราคาและหน้า feature เปลี่ยนได้ ทีมจัดซื้อควรตรวจหน้า vendor อีกครั้งก่อนตัดสินใจซื้อ QuestPDF และเครื่องหมายที่เกี่ยวข้องเป็นของเจ้าของแต่ละราย การเปรียบเทียบนี้ไม่ได้รับการรับรองจากพวกเขา

สถานการณ์ PDF ที่เกี่ยวข้อง

ถ้าคุณกำลังเทียบ QuestPDF กับ gPdf จุดอ่านต่อควรขึ้นกับขอบเขตที่ตัดสินใจ: สำหรับทีม .NET ที่อยากเรียก hosted PDF API ให้ดู API แปลง JSON เป็น PDF และ API PDF ใบแจ้งหนี้; สำหรับโลจิสติกส์และค้าปลีก ให้ดู API ป้ายจัดส่ง PDF และ API บาร์โค้ด GS1-128; สำหรับ compliance ให้ดู API PDF/A, API Factur-X และ API ZUGFeRD ถ้าคุณกำลังประเมินว่าจะดูแล render service เองหรือไม่ ให้เริ่มจาก เอกสารอ้างอิง gPdf API

FAQ

gPdf แทน QuestPDF หรือไม่?

ไม่ gPdf แทนความจำเป็นในการดูแล PDF generation service สำหรับเอกสารธุรกิจแบบมีโครงสร้าง QuestPDF ยังเป็น local C# library ที่แข็งแรงเมื่อ PDF ควรถูกสร้างภายใน application

QuestPDF ฟรีไหม?

หน้าไลเซนส์สาธารณะของ QuestPDF ระบุว่า Community tier ฟรีภายใต้ MIT terms สำหรับบุคคล, open-source project, non-profit และบริษัทที่มีรายได้รวมต่อปีต่ำกว่า 1 ล้านดอลลาร์สหรัฐ บริษัทที่เกิน threshold ต้องใช้ไลเซนส์เชิงพาณิชย์แบบถาวร: Professional 999 ดอลลาร์สหรัฐบวกภาษีท้องถิ่นสำหรับนักพัฒนาไม่เกิน 10 คน หรือ Enterprise 2,999 ดอลลาร์สหรัฐบวกภาษีท้องถิ่น ครอบคลุมทั้งองค์กร แต่ละแบบรวมอัปเดต 1 ปี

gPdf สร้างกราฟหรือแผนที่แบบ QuestPDF ได้ไหม?

ไม่ใช่ในฐานะ engine ในตัว QuestPDF เชื่อมต่อ charting library (ScottPlot, LiveCharts, Microcharts), Mapbox maps และ SkiaSharp canvas ที่เรนเดอร์ในเอกสารได้ gPdf ยังวาด vector chart ด้วย element path (รับ SVG path data) และ shape หรือฝัง SVG / PNG จาก charting library ใดก็ได้เป็น image ความต่างคือ QuestPDF คำนวณและเรนเดอร์ chart ใน process ส่วน gPdf ให้คุณสร้างภาพ chart แล้ววางลงในเอกสาร ถ้า data-driven charting หรือแผนที่เป็นศูนย์กลาง QuestPDF เหมาะกว่า

ผลิตภัณฑ์ไหนถูกกว่า?

ขึ้นกับขอบเขต QuestPDF อาจถูกกว่าสำหรับทีม .NET ที่เข้าเงื่อนไข Community terms หรือมี render infrastructure อยู่แล้ว gPdf อาจถูกกว่าเมื่อทางเลือกคือ build, host และ maintain PDF service ข้ามหลาย product หรือหลายภูมิภาค

gPdf เก็บหรือ log document data ของฉันไหม?

ไม่ JSON ที่คุณส่งและ PDF ที่ gPdf คืนกลับไม่ถูกจัดเก็บ แต่ละ request เรนเดอร์ใน Cloudflare Workers V8 isolate เดียว อยู่ใน memory เฉพาะช่วงเรนเดอร์ โดยทั่วไปประมาณ 4 ms และถูกปล่อยเมื่อ response stream จบ gPdf ไม่ retain, log, sample หรือ train บนเนื้อหา DocumentRequest operational log เก็บเฉพาะ HTTP status และระยะเวลา 30 วัน ไม่มี request body ดู security policy, privacy policy และ DPA สำหรับ workload ที่ส่งข้อมูลออกไม่ได้เลย on-prem / private deployment ทำให้ข้อมูลอยู่ในขอบเขตระบบของคุณ

QuestPDF รันโดยไม่มี internet access ได้ไหม?

ได้ หน้า license configuration ของ QuestPDF ระบุว่าไม่มี license key หรือ activation server และการคำนวณเกิดในเครื่อง นี่เป็นเหตุผลที่ชัดที่สุดข้อหนึ่งในการเลือก QuestPDF

gPdf render C# QuestPDF layout ใด ๆ ได้ไหม?

ไม่ได้ gPdf ไม่ execute C# layout code การย้ายหมายถึงการแปลงรูปทรงเอกสารเป็น gPdf JSON request หรือ gPdf template ที่บันทึกไว้