توليد PDF في C++: المكتبات والأدوات وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

توليد PDF في C++: نظرة عامة على المكتبات والأدوات



توليد مستندات PDF هي إحدى المهام الشائعة في تطوير البرمجيات باستخدام C++. من إنشاء تقارير بسيطة إلى إنشاء مستندات معقدة متعددة الصفحات تحتوي على جداول وصور ورسومات. في هذه المقالة، سنستعرض المكتبات والأدوات الأكثر شيوعًا للعمل مع PDF في C++، وإمكانياتها، ومزاياها وعيوبها، بالإضافة إلى تقديم أمثلة عملية للكود.



لماذا نحتاج إلى توليد PDF في C++؟

PDF (Portable Document Format) هو تنسيق متعدد المنصات يحافظ على تخطيط المستند بغض النظر عن الجهاز ونظام التشغيل. في C++، يُستخدم توليد PDF من أجل:

  • إنشاء التقارير والفواتير في تطبيقات الأعمال
  • توليد الوثائق من القوالب
  • تصدير البيانات من قواعد البيانات
  • توليد الإيصالات والفواتير في أنظمة المحاسبة


المكتبات الرئيسية للعمل مع PDF في C++



1. libharu (HARU PDF)

واحدة من أشهر وأسهل المكتبات استخدامًا لتوليد PDF. مكتوبة بلغة C ولكنها توفر واجهة C++ ممتازة. تسمح بإنشاء مستندات PDF من الصفر، وإضافة النصوص والصور والخطوط والمستطيلات والتعليقات التوضيحية.

الميزات:

  • حجم صغير وأداء عالٍ
  • دعم خطوط TrueType
  • ضغط الصفحات
  • العمل مع الصور (JPEG، PNG)
  • الترخيص: ZLIB/Libpng (مجاني)

مثال لتوليد PDF بسيط:

#include <hpdf.h>#include <stdio.h>

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); // تعيين حجم الصفحة A4 HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE); // إضافة نص HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 100, 500, "مرحبًا، عالم PDF في C++!"); HPDF_Page_EndText(page); // حفظ المستند HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); return 0;}


2. PoDoFo

مكتبة C++ حديثة مفتوحة المصدر للعمل مع PDF. تدعم ليس فقط الإنشاء، بل أيضًا تحرير ملفات PDF الموجودة. موثقة جيدًا وتُصان بنشاط.

الميزات:

  • كود C++ نقي (معايير حديثة)
  • دعم Unicode واللغة السيريلية
  • العمل مع النماذج والإشارات المرجعية والبيانات الوصفية
  • قراءة وكتابة PDF
  • الترخيص: LGPL

مثال لإنشاء PDF مع جدول:

#include <podofo/podofo.h>

using namespace PoDoFo;

int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page); // رسم جدول painter.DrawRect(50, 700, 500, 30); painter.DrawText(60, 710, "عنوان الجدول"); // حفظ painter.FinishPage(); document.Save("table.pdf"); return 0;}


3. wkhtmltopdf

ليست مكتبة بالمعنى التقليدي، بل أداة سطر أوامر تستخدم محرك WebKit لتحويل HTML إلى PDF. في C++، يمكن استدعاؤها عبر system() أو استخدام مكتبة غلاف.

الميزات:

  • مثالية لتوليد PDF من قوالب HTML
  • دعم CSS، JavaScript، SVG
  • تخطيط عالي الجودة (كما في المتصفح)
  • رؤوس وتذييلات، فهرس، ترقيم الصفحات
  • الترخيص: LGPLv3

مثال للاستدعاء من C++:

#include <cstdlib>

int main() { // تحويل ملف HTML إلى PDF int result = std::system("w

توصيات