مقارنات

gPdf مقابل QuestPDF لتوليد PDF في .NET

QuestPDF مكتبة PDF ممتازة لمطوري C#، بينما gPdf واجهة مستضافة عند الحافة. نقارن الترخيص، وملكية بيئة التشغيل، وسير القوالب، والامتثال، والباركود، ومتى يكون كل منتج الاختيار الأفضل.

خلاصة سريعة

اختر المنتج حسب حدود الثقة لديك. QuestPDF يبقي توليد المستند والبيانات داخل كل مستند ضمن عملية .NET نفسها؛ بالمقابل تصبح الخطوط والباركود والتوسع ومسارات الامتثال مسؤولية فريقك. gPdf يحول التوليد إلى طلب HTTP واحد يمكن لأي لغة إرساله؛ بالمقابل ترسل بيانات المستند إلى محرك توليد تابع لطرف ثالث وتعتمد على توفره. تطبيق .NET الذي يفضل التحكم المحلي والخصوصية والتشغيل دون اتصال غالبا يختار QuestPDF؛ أما الفرق متعددة اللغات التي تريد بنية PDF مستضافة عند الحافة وتسعيرا لكل صفحة فغالبا تختار gPdf.

مقارنة جنبًا إلى جنب

المعيار gPdf QuestPDF الأفضل
حد المنتج
الاختيار الصحيح يعتمد على ما إذا كنت تريد شراء خدمة أم امتلاك مسار كود التوليد.
API مستضافة عند الحافة لـ JSON Render وTemplate Render وE-Invoice Render. مكتبة C# / .NET محلية تثبت من NuGet وتستدعى من كود التطبيق. متعادل
شكل الدمج الأساسي طلب HTTPS POST من Node أو Python أو Go أو .NET أو Ruby أو PHP أو Java أو العمال أو المهام أو وكلاء الواجهة. API سلسة في C# مع كتابة قوية ودعم IDE وبنى .NET مألوفة. متعادل
مكان تشغيل بيئة التوليد محرك توليد على Cloudflare Workers عند الحافة؛ لا خدمة PDF ولا إعداد خطوط ولا عنقود نشر داخل حزمتك. يعمل حيث يعمل تطبيق .NET لديك؛ فريقك يملك CPU والذاكرة والاعتمادات الأصلية أو الحزم والنشر والمراقبة والتوسع. 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 حسب السكربت (KR, JP, SC)؛ المستدعون لا يضعون ملفات خطوط داخل التطبيقات. يشحن Lato ويمكنه تحميل خطوط البيئة ومجلد النشر والخطوط المخصصة مع سلاسل بدائل — لكن وثائقه نفسها تحذر أن 'in most cloud deployments, few or no fonts are available.' gPdf
كلمات المرور والصلاحيات أثناء التوليد
QuestPDF يدعم نفس درجات التشفير وكلمات مرور المستخدم والمالك، لكن كخطوة بعد التوليد على الملف الناتج، لا داخل طلب التوليد نفسه.
داخل طلب التوليد نفسه — `settings.security` يطبق تشفير AES-128/256 وكلمات مرور الفتح والمالك وثمانية أعلام صلاحيات في نفس طلب `/api/v1/pdf/render`. يولد المستند أولا، ثم يشفر في Document Operation منفصل — `DocumentOperation.LoadFile(...).Encrypt(new Encryption256Bit { ... }).Save(...)`. gPdf
تكرار القوالب gPdf Studio يصمم قوالب JSON نفسها التي يستخدمها الإنتاج عبر `template_id + data`. QuestPDF Companion يوفر معاينة بتحديث فوري، وفحصا للتسلسل الهرمي، وأدوات إحداثيات، وتصفحا للمصدر لمستندات C#. متعادل
التسعير التجاري
تمت مراجعة أسعار QuestPDF مقابل صفحات الترخيص العامة في 2026-06-02. فرق .NET عالية الحجم يجب أن تقارن الرخصة والاستضافة مع تسعير gPdf لكل صفحة.
Basic بسعر 5 دولارات/شهر يتضمن 100,000 صفحة؛ الزيادة تبدأ من 0.00005 دولار لكل صفحة، بنفس حساب الصفحة المنشور في كل سطح. مجاني وفق شروط Community MIT للشركات دون 1 مليون دولار إيراد سنوي؛ الرخص التجارية الدائمة تعرض Professional بسعر 999 دولارا (حتى 10 مطورين) وEnterprise بسعر 2,999 دولارا (على مستوى المؤسسة بلا عد للمطورين)، إضافة إلى الضريبة المحلية، وكل رخصة تشمل سنة تحديثات. متعادل
تكاليف الخوادم والنشر لا أسطول خوادم للنشر مع API العامة؛ الفوترة حسب الخطة والصفحات. الشروط التجارية تعلن مشاريع وخوادم ونشرات غير محدودة؛ لكن البنية التحتية تبقى مملوكة للعميل. متعادل
PDF/A والفوترة الإلكترونية ستة ملفات PDF/A (1b/2b/3b/4/2u/3u) إضافة إلى PDF/UA-1، ونقطة نهاية مستضافة لـ Factur-X / ZUGFeRD تنتج EN 16931 CII XML داخل PDF/A-3b مع تحقق من جهة الخادم وإقامة بيانات أوروبية أو عالمية. دعم قوي في الكود لـ PDF/A وPDF/UA-1 وZUGFeRD 2.1 / Factur-X؛ أنت توصل تحقق veraPDF وMustang بنفسك. متعادل
أين تذهب بيانات المستند
QuestPDF يبقي البيانات داخل العملية؛ gPdf يرسلها لكنه لا يحتفظ بها — سجلات التشغيل تحتفظ فقط بحالة HTTP والمدة، لا أجسام الطلبات.
API العامة ترسل الحمولة، لكن المحرك بلا احتفاظ — يبقى طلب JSON داخل عزل Cloudflare Workers فقط أثناء التوليد (~4 ms عادة)، ولا يتم تخزينه أو تسجيله أو استخدامه للتدريب. إقامة البيانات الأوروبية أو العالمية والنشر المحلي أو الخاص يقللان التعرض أو يغلقانه. تنتج البايتات داخل العملية؛ بيانات المستند لا تعبر حدود الثقة إلى طرف ثالث. متعادل
تشغيل دون اتصال / معزول شبكيا
QuestPDF يعمل دون اتصال بلا إعداد؛ gPdf يصل إلى نفس النتيجة عبر نشر خاص للمؤسسات.
API العامة تحتاج شبكة؛ النشر المحلي أو الخاص للمؤسسات يشغل المحرك داخل بنيتك لتشغيل دون اتصال أو في بيئة معزولة. يعمل محليا بلا مفتاح رخصة أو خادم تفعيل أو استدعاءات شبكة وقت التشغيل — نوع الرخصة يضبط بسطر كود واحد على أساس الثقة. متعادل
عمليات على ملفات PDF موجودة ينشئ ملفات PDF جديدة من طلبات منظمة؛ لا يفتح ولا يدمج ولا يفك تشفير ولا يعدل ملفات موجودة. عمليات على ملفات PDF موجودة: دمج، إعادة ترتيب / عكس / تصفية الصفحات، طبقات علوية، تشفير وفك تشفير 40/128/256-bit، مرفقات، بيانات XMP وصفية، وتهيئة للعرض الخطي على الويب. QuestPDF
الرسوم البيانية وتصور البيانات
كلاهما يعتمد على مكتبة رسوم لتحويل البيانات إلى مخطط؛ QuestPDF يرسمه داخل المستند، وgPdf يضع SVG / PNG الذي تنتجه. QuestPDF يتقدم في الرسوم والخرائط وcanvas المدمجة.
يرسم فنا متجهيا عبر عنصر `path` (بيانات مسار SVG) والأشكال، أو يضمن رسما SVG / PNG منتجا من أي مكتبة رسوم — لكن بلا محرك رسوم بيانية أو خرائط أو API canvas مدمجة. تكاملات رسوم جاهزة (ScottPlot, LiveCharts, Microcharts)، وخرائط Mapbox، وAPI canvas من SkiaSharp للرسومات المخصصة. QuestPDF
أفضل حالة استخدام افتراضية مستندات أعمال إنتاجية مشتركة بين الفرق: ملصقات، فواتير، إيصالات، كشوف، تذاكر، وفواتير إلكترونية. تطبيقات C# التي تريد توليد مستندات محليا مع ملكية كاملة للكود وبلا اعتماد على خدمة وقت التشغيل. متعادل

متى تختار أيًّا منهما

اختر gPdf عندما
  • توليد PDF بنية تحتية مشتركة بين عدة خدمات أو لغات، وليس ميزة يملكها تطبيق .NET واحد.
  • تريد إخراج توليد PDF وإدارة الخطوط وهندسة الباركود والتوسع الإقليمي من حزمة التطبيق.
  • يريد الفريق أن تتغير القوالب بصيغة `template_id + data`، لا عبر نشر كود C#.
  • تحتاج توليدا عند الحافة قرب المستودعات أو العملاء أو مهام الخلفية دون نشر خدمة PDF في .NET داخل كل منطقة.
  • تفضل سعرا منشورا لكل صفحة ولا تريد شراء رخصة تجارية قبل أول توليد إنتاجي.
اختر QuestPDF عندما
  • منتجك .NET أولا وكود C# هو مصدر الحقيقة الطبيعي لتخطيط المستند.
  • بيانات المستند يجب أن تبقى داخل محيطك، ونشر gPdf خاص للمؤسسات ليس مطروحا.
  • تحتاج توليدا دون اتصال أو في بيئة معزولة جاهزا مباشرة، دون إعداد نشر توليد خاص.
  • التوليد يقع في مسار متزامن حساس للزمن حيث يتفوق استدعاء داخل العملية على أي رحلة شبكة.
  • تحتاج عمليات على ملفات PDF موجودة داخل نفس المكتبة — دمج، استخراج صفحات، طبقات علوية، فك تشفير أو مرفقات.
  • ترسم رسوما أو خرائط أو رسومات SkiaSharp مخصصة داخل المستند (ScottPlot, LiveCharts, Microcharts, Mapbox).
  • أنت مؤهل لشروط Community MIT، أو تريد رخصة دائمة لمرة واحدة، وتشغيل المحرك محليا ليس عبئا.
القدرات

gPdf هي API لتحويل JSON إلى PDF على Edge للفواتير والمستندات وملصقات الشحن والباركود وPDF/A والفواتير الإلكترونية عالية الحجم. تصيير PDF بفئة الميلي ثانية على نطاق edge عالمي — محسّن لإنشاء مستندات صناعية يمكن التنبؤ بها. تسعير بمستوى البنية التحتية، منخفض بما يكفي ليستبدل بناء وتشغيل بنية PDF التحتية الخاصة بك.

القدرات

QuestPDF ممتاز عندما يكون C# هو حد المنتج

QuestPDF يستحق مقارنة منصفة. هو مكتبة حديثة لتوليد PDF لمطوري C#، مع API سلسة وكتابة قوية ومساحة توثيق واسعة وتطبيق Companion للمعاينة والتصحيح، وترخيص واضح على نحو غير شائع في عالم PDF SDK.

السؤال المنتج ليس “من يستطيع إنشاء PDF؟” كلاهما يستطيع. السؤال المفيد هو أين يجب أن يعيش حد PDF: داخل تطبيق .NET يملك التخطيط والبايتات ودورة الحياة، أم كخدمة بنية تحتية تستدعيها عدة منتجات ولغات.

دليل قرار سريع

  • اختر QuestPDF عندما يكون C# هو مصدر الحقيقة للمستند، أو يجب أن يعمل التطبيق دون اتصال، أو تحتاج عمليات محلية على ملفات PDF موجودة.
  • اختر gPdf عندما يجب أن تخدم طبقة PDF واحدة Node وPython وGo و.NET والمهام والأنظمة الإقليمية عبر HTTP API نفسها.
  • اختر gPdf عندما يجب أن تكون تغييرات التخطيط مراجعات قوالب، لا إعادة بناء C# ولا إعادة نشر خدمة.

نفس عائلة المستندات، لكن نموذج الملكية مختلف

مع QuestPDF، التطبيق يملك توليد PDF. وهذه قوة حقيقية: يبقى C# قرب نموذج المجال لديك، يعمل ويصحح محليا، ولا يوجد استدعاء وقت تشغيل إلى API خارجي.

المقابل أن الفريق يملك أيضا بقية سطح الإنتاج:

  • CPU وذاكرة للتوليد.
  • اكتشاف الخطوط وبدائلها في كل بيئة نشر.
  • دمج مكتبة الباركود واختبار جودة الطباعة.
  • الحزم الأصلية وهموم النشر لتكاملات الرسوم أو الرسومات المخصصة.
  • مراقبة وإعادة محاولات ومعالجة الفشل.
  • نشر إقليمي عندما يكون المستخدمون أو المستودعات عالميين.
  • طرح إصدارات كلما تغير تخطيط المستند.

مع gPdf، ينتقل هذا السطح إلى الخارج: يرسل التطبيق DocumentRequest أو template_id + data، والخدمة تملك المحرك وبيئة الحافة والخطوط وعناصر الباركود ومخرج PDF/A وحزم الفواتير الإلكترونية. هو أقل جاذبية إن أردت كل تفصيل داخل C#، وأكثر جاذبية إن كان توليد PDF طبقة خدمة يمكن لأي حزمة تقنية استدعاؤها.

ثلاثة تنازلات يجب على API مستضاف توضيحها بصراحة

معظم عروض “مكتبة مقابل API” تتجاوز أول ثلاثة أسئلة يسألها معماري .NET. المقارنة العادلة تجيب عنها صراحة.

1. أين تذهب بيانات المستند. هذه الصفحة تتحدث كثيرا عن الفواتير والكشوف والفواتير الإلكترونية — مستندات ممتلئة بأسماء وعناوين ومعرفات ضريبية ومبالغ. مع QuestPDF، تبنى هذه البايتات داخل العملية لديك ولا تغادر. API العامة في gPdf ترسل الحمولة إلى المحرك، لكن المحرك بلا احتفاظ: يبقى طلب JSON داخل عزل Cloudflare Workers V8 فقط أثناء التوليد (~4 ms عادة)، ويحرر عند اكتمال الاستجابة — لا يخزن ولا يسجل ولا تؤخذ منه عينات ولا يستخدم للتدريب، مع سجلات تشغيلية محصورة في حالة HTTP والمدة (security, DPA). اختيار إقامة البيانات الأوروبية أو العالمية والنشر المحلي أو الخاص للمؤسسات يقلل التعرض أو يغلقه. رغم ذلك، إبقاء التوليد داخل العملية بلا إعداد إضافي سبب مشروع، وأحيانا حاسم، يجعل فرق الماليات أو القطاع العام تختار QuestPDF.

2. نمط الفشل. المكتبة لا تملك طرفا ثالثا يمكن أن يتعطل؛ التوليد يفشل فقط على بنية تملكها أصلا. API مستضافة تضيف اعتماد توفر لا تتحكم به. الطريقة الصحيحة لاعتماد gPdf هي معاملة استدعاءات التوليد مثل أي استدعاء خارجي: مهلة، وإعادة محاولة، وطابور، ويفضل وضع تراجع متدرج. إذا كان توليد المستند على مسار متزامن حرج، فقارن بوضوح بين “تشغله بنفسك” و“تعتمد على توفر المورّد.“

3. ملف زمن الاستجابة. التوليد داخل العملية هو استدعاء دالة بلا شبكة. الاستدعاء المستضاف هو رحلة شبكة ذهابا وإيابا. في الدُفعات والمهام غير المتزامنة غالبا يكون هذا ضجيجا بسيطا. أما في “المستخدم ضغط، ويجب أن يظهر PDF الآن” فالتوليد داخل العملية أسرع بنيويا — نقاط حضور gPdf عند الحافة تجعل القفزة صغيرة، لكنها تبقى TLS مع رحلة شبكة، بينما QuestPDF استدعاء طريقة.

لا تجعل هذه النقاط gPdf خيارا خاطئا؛ بل تحدد متى يكون الخيار الصحيح — للفرق التي يمكن أن تغادر بيانات مستنداتها العملية، وتتحمل تدفقاتها قفزة شبكة، وتفضل الاعتماد على توفر المورّد بدلا من تشغيل أسطول توليد بنفسها.

الترخيص ونموذج السعر

صفحة الترخيص العامة لـ QuestPDF تقول إن الرخصة التجارية مطلوبة فقط للشركات التي تتجاوز 1 مليون دولار من إجمالي الإيراد السنوي. مستوى Community مجاني وفق شروط MIT للأفراد المؤهلين ومشاريع المصدر المفتوح والمنظمات غير الربحية والشركات دون ذلك الحد. الصفحة نفسها تعرض رخصتين تجاريتين دائمتين: Professional بسعر 999 دولارا مع الضريبة المحلية لفرق حتى 10 مطورين، وEnterprise بسعر 2,999 دولارا مع الضريبة المحلية لكامل المؤسسة دون عد للمطورين. كلاهما يشمل سنة تحديثات ومشاريع وخوادم ونشرات غير محدودة، والرخصة لا تنتهي لآخر نسخة حصلت عليها.

نموذج الإنفاذ خفيف أيضا. تضبط الرخصة بسطر واحد — QuestPDF.Settings.License = LicenseType.Community; — بلا مفتاح رخصة ولا خادم تفعيل، ووفق صفحة الإعداد الخاصة بـ QuestPDF لا توجد استدعاءات شبكة ولا بيانات تغادر الجهاز. هو نموذج قائم على الثقة: تختار المستوى الذي ينطبق عليك. لا توجد فاتورة مورّد لكل مستند، والرخصة المدفوعة تعمل في أي مكان، حتى دون اتصال كامل.

gPdf يسعر خدمة التوليد مباشرة. خطة Basic العامة تبدأ من 5 دولارات/شهر مقابل 100,000 صفحة، والزيادة تبدأ من 0.00005 دولار لكل صفحة. هذه فاتورة مورّد، لكنها تلغي مشروع تشغيل توليد PDF: لا عنقود توليد، لا مسار نشر NuGet، لا مجموعة دافئة إقليمية، لا حزمة خطوط لكل تطبيق، ولا خدمة PDF تحتاج ترقيعا.

لذلك ليست المقارنة “999 دولارا مقابل 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 دولارا لكل مليون، و500 دولار لكل 10 ملايين). رخصة Enterprise بسعر 2,999 دولارا لا تكسر التعادل مع تلك الفاتورة إلا قرب 60 مليون صفحة — وهذا الحساب يتجاهل استضافة QuestPDF وأشهر عمل المهندسين، ما يدفع نقطة التعادل الحقيقية أبعد لصالح gPdf إلا إذا كنت تشغل تلك البنية بثمن رخيص أصلا. القاعدة العملية: إذا كنت ستبني وتوظف لتشغيل خدمة توليد لمجرد استخدام المكتبة، فغالبا يفوز gPdf في التكلفة الكلية قبل أن تلحق فاتورة الصفحات بسعر الرخصة؛ أما إن كانت البنية موجودة وقريبة من المجانية لديك، فالرخصة الدائمة تفوز عند الحجم الكبير.

سير عمل التطوير: Fluent C# مقابل القوالب

API السلسة في QuestPDF ملائمة عندما يملك المطورون شكل المستند. الكتابة القوية وسلاسل الطرق ومكونات C# القابلة لإعادة الاستخدام وإعادة الهيكلة داخل IDE وتطبيق Companion كلها منطقية عندما يكون PDF جزءا من قاعدة كود التطبيق.

gPdf يناسب مسارا مختلفا. يمكن للمطورين كتابة JSON مباشرة، لكن أنظمة الإنتاج غالبا تنتقل إلى القوالب. المصمم أو المشغل أو المهندس يعدل التخطيط في gPdf Studio. التخطيط المعتمد يصبح قالبا، والخلفية تستمر في التوليد عبر template_id + data.

هذه النقطة مهمة عندما يتغير المستند كثيرا. إذا تغير ملصق الناقل أو الفاتورة أو إيصال التعبئة أو تخطيط الكشف، يستطيع gPdf إبقاء بيئة التشغيل مستقرة وتحريك القالب فقط. مع QuestPDF التخطيط هو كود C#، والمسار الطبيعي هو تغيير كود ثم اختبار ثم بناء ثم نشر ثم خطة رجوع.

لا يوجد مسار أفضل دائما: QuestPDF يحسن تجربة مطوري C# الذين يريدون المستند ككود؛ gPdf يناسب القوالب التشغيلية المشتركة بين الأنظمة.

الامتثال: كلا المنتجين يتعامل معه بجدية

هذه ليست مقارنة يفوز فيها gPdf لأنه يقول إن المنافس بلا ميزات امتثال. مواد QuestPDF العامة الحالية تعرض دعما قويا للمعايير، بما في ذلك PDF/A وPDF/UA-1 وEN 16931 للفوترة الإلكترونية عبر مثال ZUGFeRD 2.1 / Factur-X مبني على معيار UN/CEFACT Cross Industry Invoice (CII). المثال يضبط PdfA = true، يضمن factur-x.xml عبر AddAttachment()، يوسع المستند ببيانات XMP وصفية، ويتحقق من النتيجة باستخدام veraPDF (لـ PDF/A-3b) وMustang Project (لـ ZUGFeRD). إنها وصفة كاملة وصريحة — ومسارك أنت يملك كل خطوة فيها.

gPdf يغلف نفس المعايير كعقد API. JSON Render يعرض ستة ملفات PDF/A (1b, 2b, 3b, 4, 2u, 3u) إضافة إلى PDF/UA-1 عبر settings.profile، وTemplate Render يعيد استخدام نموذج المستند نفسه، وE-Invoice Render يعرض نقطة مخصصة POST /api/v1/e-invoice/render تنتج حزم Factur-X / ZUGFeRD على PDF/A-3b مع EN 16931 CII XML مدمج. الفرق عن وصفة QuestPDF هو ما تفعله الخدمة لك: gPdf يشغل تحقق PDF/A-3b والفاتورة الإلكترونية من جهة الخادم، ويدعم التسليم المتزامن داخل الاستجابة أو التسليم عبر كائن مفحوص، ويعرض إقامة بيانات أوروبية أو عالمية كإعداد طلب بدلا من خطوات تجمعها وتشغلها. QuestPDF مناسب عندما يجب أن يعيش التحقق داخل مسار .NET لديك؛ gPdf عندما يجب أن يكون عقدا مستضافا مشتركا بين عدة أنظمة.

الخطوط والباركود: جهد الدمج هو المقارنة الحقيقية

QuestPDF يملك نموذج خطوط قويا. يشحن Lato 2.015 افتراضيا، ويحمّل خطوط النظام ومجلد النشر تلقائيا، ويسمح بتسجيل خطوط مخصصة عبر FontManager، ويدعم سلاسل بدائل الخطوط. هذا يمنح المطورين تحكما. لكن الوثائق نفسها صريحة حول العثرة: “in most cloud deployments, few or no fonts are available, which may lead to unexpected results,” وتوصي بتعطيل خطوط البيئة وتسجيل ما تحتاجه بوضوح. بمعنى آخر، في حاوية أو هدف بلا خوادم تصبح بيئة الخطوط مسؤوليتك للتخطيط والشحن والاختبار — والحرف المفقود يصبح رمزا بديلا أو، إذا فعلت CheckIfAllTextGlyphsAreAvailable، استثناء.

gPdf يجعل الخطوط جزءا من حدود الخدمة. يضم المحرك مجموعة متعددة السكربتات — Latin, Greek, Cyrillic, Arabic, Hebrew, Bengali, Tamil, Thai, Vietnamese, monospace، وCJK مع بدائل حسب السكربت إلى Noto KR / JP / SC. يعالج اختيارات الخطوط الصامتة عبر اختيار تلقائي ضمني، والاختيارات الصريحة عبر prefer أو strict. المستدعون لا يشحنون خط CJK ولا يسجلون أصول Noto داخل تطبيق .NET ولا يضبطون البدائل لكل هدف نشر. هم يرسلون البيانات؛ والمحرك يملك بيئة الخطوط نفسها في كل منطقة.

شكل مقارنة الباركود مشابه. وثائق QuestPDF تعرض نهجا قويا باستخدام ZXing.Net مرسوما كـ SVG متجهي، وتذكر بوضوح أن ZXing.Net ليس ضمن حزمة 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، توليد الباركود عنصر مخطط من الدرجة الأولى. الطلب يعلن format وcontent والحجم الفيزيائي وسطر النص المقروء للبشر اختياريا — وصيغ GS1 أصلية، لذلك تدخل معرفات التطبيق مباشرة في 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 واختبار النتيجة سهلا. لكن عبر عدة خدمات وقوالب — خصوصا أحمال لوجستية أو تجارة تجزئة تحتاج GS1-128 وSSCC وGTIN وGS1 DataMatrix أو GS1 QR مع سطر تفسير مقروء للبشر — وضع سلوك الباركود داخل API المستند أسهل صيانة من تكرار توصيل ZXing نفسه في كل خدمة.

أين يفوز QuestPDF بوضوح

إضافة إلى التشغيل دون اتصال وإبقاء بيانات المستند داخل المحيط (كما ذكرنا)، وعندما يكون كود PDF نفسه جزءا من المنتج — أي أن الفريق يحتاج فحص أو توسيع أو امتلاك مسار المحرك — يملك QuestPDF منطقتين واضحتين خارج نطاق gPdf:

  • عمليات على ملفات PDF موجودة. يستطيع QuestPDF تحميل ملفات موجودة ودمجها، اختيار الصفحات أو إعادة ترتيبها أو عكسها أو تصفيتها، تطبيق طبقات علوية، إضافة مرفقات، ضبط بيانات XMP الوصفية، وتهيئة الملف للتسليم الخطي عبر الويب، والتشفير وفك التشفير بأمان 40/128/256-bit. يستطيع gPdf حماية ملفات PDF التي يولدها بكلمة مرور وضبط صلاحياتها، لكنه لا يفتح ولا يدمج ولا يفك تشفير ملفات لم ينشئها.
  • الرسوم والخرائط والرسومات المخصصة. يدمج QuestPDF مكتبات رسوم (ScottPlot, LiveCharts, Microcharts)، ويضمن خرائط Mapbox، ويعرض SkiaSharp canvas للرسم ثنائي الأبعاد المخصص. يستطيع gPdf رسم فن متجهي بعنصر path (بيانات مسار SVG) أو تضمين رسم SVG / PNG تنتجه أنت، لكنه لا يملك محرك رسوم بيانية أو خرائط أو canvas مدمجة — لذلك إذا كان الرسم القائم على البيانات محوريا في المستند، تبقى تلك الأدوات مع QuestPDF.

أين يفوز gPdf بوضوح

يفوز gPdf عندما لا تريد المؤسسة أن يملك كل فريق منتج خدمة PDF خاصة به — حزم متعددة اللغات، ومسارات عالمية، وأنظمة ERP / OMS / WMS / التجارة الإلكترونية / التقنية المالية / التذاكر التي تولد مستندات من بيانات منظمة، مع قوالب تتغير مستقلة عن الكود. في هذه البيئات تبدأ المكتبة المحلية رخيصة ثم تتحول إلى أسطول: خدمة لكل لغة، ومسار نشر لكل منطقة، وخطة خطوط لكل حاوية، ومجموعة انحدارات باركود لكل فريق. gPdf يحول ذلك الأسطول إلى عقد HTTP واحد.

البنية بلا خوادم توضح الحد أكثر. على AWS Lambda أو Cloud Run أو Azure Functions، لا يزال QuestPDF يعمل داخل التطبيق — فريقك يحزم بيئة .NET والخطوط والاعتمادات الأصلية وCPU / ذاكرة كافية لذروة عمل PDF، ويملك البدايات الباردة. gPdf هو خدمة توليد أصلا: الدالة ترسل طلب template_id + data صغيرا إلى الحافة وتحصل على بايتات PDF، بلا محرك يحتاج تسخينا ولا عامل في كل منطقة للتوسع.

شكل الانتقال

الانتقال من QuestPDF إلى gPdf ليس إعادة كتابة سطرا بسطر. هو تغيير في الحد: كود C# الذي يبني PDF يصبح إما طلب مستند JSON أو قالبا منشورا.

قبل / بعد — استدعاء بناء المستند في 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();

بعد انتقال هذا الحد، يمكن أن تصبح تغييرات التخطيط مراجعات قوالب بدلا من نشر تطبيق. يظل التطبيق يملك بيانات العمل وقرارات المسار؛ وgPdf يملك التوليد.

ملاحظة عن الأسعار والمصادر

تمت مراجعة معلومات QuestPDF في هذه الصفحة بتاريخ 2026-06-02 مقابل مصادر QuestPDF الرسمية: License and Pricing، License configuration، Features Overview، Companion App features، Barcodes، Font management، وZUGFeRD example. صفحات الأسعار والميزات قد تتغير؛ على فرق الشراء إعادة فحص صفحة المورّد قبل قرار الشراء. QuestPDF والعلامات المتعلقة بها مملوكة لأصحابها، وهذه المقارنة غير مصادق عليها منهم.

سيناريوهات توليد PDF ذات صلة

إذا كنت تقارن QuestPDF وgPdf، فابدأ من حدود المنتج لا من قائمة ميزات عامة: هل تحتاج واجهة JSON إلى PDF مشتركة بين عدة لغات، أم مكتبة C# محلية؟ هل حجم العمل الأساسي هو فواتير PDF وملصقات شحن تحتاج GS1-128 وSSCC وGTIN؟ هل يجب أن تكون مخرجات PDF/A أو Factur-X أو ZUGFeRD جزءا من عقد API مستضاف، أم خطوات تتحقق منها داخل مسار .NET؟ ولأعمال اللوجستيات والتجزئة، راجع أيضا واجهة باركود GS1 عند تقييم تكلفة توصيل ZXing.Net في كل خدمة.

FAQ

هل يستبدل gPdf QuestPDF؟

لا. gPdf يستبدل الحاجة إلى تشغيل خدمة توليد PDF للمستندات التجارية المنظمة. يبقى QuestPDF مكتبة C# محلية قوية عندما يجب أن يولد PDF داخل التطبيق.

هل QuestPDF مجاني؟

صفحة الترخيص العامة لـ QuestPDF تقول إن مستوى Community مجاني وفق شروط MIT للأفراد المؤهلين ومشاريع المصدر المفتوح والمنظمات غير الربحية والشركات دون 1 مليون دولار من إجمالي الإيراد السنوي. الشركات فوق هذا الحد تحتاج رخصة تجارية دائمة: Professional بسعر 999 دولارا مع الضريبة المحلية حتى 10 مطورين، أو Enterprise بسعر 2,999 دولارا مع الضريبة المحلية على مستوى المؤسسة، وكل منهما يشمل سنة تحديثات.

هل يستطيع gPdf توليد رسوم بيانية أو خرائط مثل QuestPDF؟

ليس كمحرك مدمج. يدمج QuestPDF مكتبات رسوم (ScottPlot, LiveCharts, Microcharts)، وخرائط Mapbox، وSkiaSharp canvas ترسم داخل المستند. يستطيع gPdf مع ذلك رسم مخططات متجهية عبر عنصر path (يقبل بيانات مسار SVG) والأشكال، أو تضمين SVG / PNG منتج من أي مكتبة رسوم كـ image. الفرق أن QuestPDF يحسب ويرسم المخطط داخل العملية، بينما مع gPdf تنتج أنت الرسم ويضعه gPdf. إذا كانت الرسوم القائمة على البيانات أو الخرائط محور المستند، فـ QuestPDF أنسب.

أي المنتجين أرخص؟

يعتمد على الحد. قد يكون QuestPDF أرخص لفرق .NET المؤهلة لشروط Community أو التي تشغل بنية توليد أصلا. وقد يكون gPdf أرخص عندما يكون البديل بناء واستضافة وصيانة خدمة PDF عبر منتجات أو مناطق.

هل يخزن gPdf أو يسجل بيانات مستندي؟

لا. JSON الذي ترسله وPDF الذي يعيده gPdf لا يخزنان. كل طلب يولد داخل عزل Cloudflare Workers V8 واحد، يبقى في الذاكرة فقط أثناء التوليد — عادة نحو 4 ms — ويحرر عند اكتمال تدفق الاستجابة؛ لا يحتفظ gPdf بمحتوى DocumentRequest ولا يسجله ولا يأخذ منه عينات ولا يستخدمه للتدريب. سجلات التشغيل تحتفظ فقط بحالة HTTP والمدة لمدة 30 يوما ولا تحتوي أجسام الطلبات. راجع security policy وprivacy policy وDPA. للأحمال التي لا تستطيع إرسال البيانات إطلاقا، يبقيها النشر المحلي أو الخاص داخل محيطك.

هل يستطيع QuestPDF العمل دون اتصال بالإنترنت؟

نعم. صفحة إعداد الرخصة لدى QuestPDF تقول إنه لا يوجد مفتاح رخصة ولا خادم تفعيل، وأن الحسابات تتم محليا. هذا من أوضح أسباب اختيار QuestPDF.

هل يستطيع gPdf توليد أي تخطيط C# عشوائي من QuestPDF؟

لا. gPdf لا ينفذ كود تخطيط C#. الهجرة تعني تحويل شكل المستند إلى طلب JSON في gPdf أو قالب gPdf محفوظ.