توليد PDF في C++: نظرة عامة على المكتبات والأدوات
يعد توليد مستندات PDF من المهام الشائعة في تطوير البرمجيات. التقارير والفواتير والشهادات والوثائق - كلها تتطلب أداة موثوقة ومرنة لإنشاء PDF. في بيئة C++، توجد عدة حلول مجربة، لكل منها نقاط قوته. في هذه المقالة، سنستعرض المكتبات والأدوات الرئيسية التي ستساعدك في تنفيذ توليد PDF بلغة C++، وسنقدم أمثلة على الكود لكل منها.
1. PoDoFo - مكتبة قوية للعمل مع PDF
PoDoFo هي مكتبة متعددة المنصات بلغة C++، مصممة لإنشاء وتحرير وتحليل مستندات PDF. توفر تحكمًا كاملاً في بنية الملف، وتدعم الخطوط والصور والتعليقات التوضيحية والنماذج.
الإمكانيات الرئيسية:
- إنشاء PDF من الصفر وتحرير المستندات الموجودة
- دعم خطوط TrueType و Type1 وخطوط PDF القياسية
- تضمين الصور (PNG، JPEG، TIFF)
- العمل مع الجداول والمستندات متعددة الصفحات
- دعم الضغط والتشفير
مثال على الكود: إنشاء PDF بسيط مع نص
#include <podofo/podofo.h>using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetPage(page);
// تعيين الخط PdfFont* font = document.CreateFont("Arial"); painter.SetFont(font, 12.0);
// رسم النص painter.DrawText("مرحبًا، عالم PDF!", 50, 700);
painter.FinishPage(); document.Save("output_podofo.pdf"); return 0;}2. libharu - مكتبة خفيفة وسريعة
libharu (أو HPDF) هي مكتبة بسيطة بلغة C لتوليد PDF. على الرغم من أنها مكتوبة بلغة C، إلا أنها تعمل بشكل ممتاز مع C++ ولا تتطلب تبعيات معقدة. تعتبر libharu مثالية للمهام البسيطة التي لا تحتاج إلى دعم كامل لمعيار PDF.
الإمكانيات الرئيسية:
- دعم النصوص والصور والخطوط والمستطيلات
- العمل مع السيريلية عبر الترميزات
- ضغط الصفحات
- ترخيص Zlib (مجاني)
مثال على الكود: إنشاء PDF مع صورة
#include <hpdf.h>#include <stdio.h>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT);
// تحميل الصورة HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, "example.jpg"); HPDF_Page_DrawImage(page, image, 50, 500, 200, 150);
// نص HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 14); HPDF_Page_TextOut(page, 50, 700, "مثال مع صورة"); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output_libharu.pdf"); HPDF_Free(pdf); return 0;}3. wkhtmltopdf - تحويل HTML إلى PDF
wkhtmltopdf ليست مكتبة بالمعنى التقليدي، بل هي أداة سطر أوامر مبنية على WebKit. ومع ذلك، يمكن استدعاؤها بسهولة من كود C++ عبر system() أو popen(). هذا هو الخيار المثالي إذا كنت بحاجة إلى تحويل قالب HTML إلى مستند PDF مع الحفاظ على الأنماط والتنسيق.
الإمكانيات الرئيسية:
- دعم CSS و JavaScript والجداول والصور
- ضبط الهوامش والاتجاه والتذييلات والرؤوس
- جودة عرض عالية
- سهولة التكامل
مثال على الكود: استدعاء wkhtmltopdf من C++
#include <cstdlib>#include <string>
int main() { std::string input = "report.html"; std::string output = "report.pdf"; std::string