توليد PDF في C++: نظرة عامة على المكتبات وأمثلة عملية
يعد توليد مستندات PDF من المهام الشائعة في تطوير تطبيقات المؤسسات وأنظمة التقارير وإدارة المستندات. على الرغم من أن لغة C++ لا تحتوي على دعم مدمج لتنسيق PDF، إلا أن هناك العديد من المكتبات الناضجة التي تسمح بإنشاء وتحرير وعرض ملفات PDF. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: libharu وPoDoFo وwkhtmltopdf. لكل منها، سنقدم مثالاً للكود ونصف الإمكانيات الرئيسية.
1. libharu — توليد PDF خفيف وسريع
libharu (Haru PDF) هي مكتبة متعددة المنصات مكتوبة بلغة C النقية، وهي مناسبة تماماً لمشاريع C++. لا تعتمد على مكتبات رسومية خارجية، وتدعم Unicode (UTF-8)، وتضمين الخطوط (TrueType)، والعمل مع الصور (JPEG، PNG). السيناريو الرئيسي هو إنشاء المستندات برمجياً "من الصفر".
التثبيت
قم بتنزيل الكود المصدري من GitHub وقم ببنائه باستخدام CMake:
mkdir build && cd buildcmake .. -DLIBHPDF_SHARED=ONmakesudo make installمثال: إنشاء PDF بسيط مع نص
#include <hpdf.h>#include <cstdio>
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);
// الخط const char* font_name = HPDF_LoadTTFontFromFile(pdf, "arial.ttf", HPDF_TRUE); HPDF_Font font = HPDF_GetFont(pdf, font_name, "UTF-8"); HPDF_Page_SetFontAndSize(page, font, 14);
// النص HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 50, 750, "مرحباً بالعالم! PDF من C++."); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("تم إنشاء PDF: output.pdf"); return 0;}إمكانيات libharu
- إنشاء مستندات متعددة الصفحات
- رسومات متجهة (خطوط، مستطيلات، منحنيات)
- تضمين صور JPEG/PNG
- دعم الإشارات المرجعية (outline) والتعليقات التوضيحية
- ضغط محتوى الصفحات
2. PoDoFo — العمل المتقدم مع PDF
PoDoFo هي مكتبة C++ توفر تحكماً كاملاً في بنية PDF. تسمح ليس فقط بإنشاء المستندات، بل أيضاً بتحرير المستندات الحالية، واستخراج النص، وإدارة البيانات الوصفية، والتشفير. تستخدم PoDoFo CMake وتتطلب إعداداً بسيطاً.
التثبيت (Ubuntu/Debian)
sudo apt install libpodofo-devمثال: إضافة نص إلى صفحة
#include <podofo/podofo.h>using namespace PoDoFo;
int main() { PdfMemDocument document; document.SetPdfVersion(PdfVersion::V1_4); document.GetMetadata().SetTitle("مستند PoDoFo");
PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page);
PdfFont* font = document.CreateFont("Arial", false, false, false); font->SetFontSize(16); painter.SetFont(font); painter.DrawText(50, 700, "تم إنشاؤه باستخدام PoDoFo!");
painter.FinishDrawing(); document.Save("podofo_example.pdf"); return 0;}نقاط القوة في PoDoFo
- دعم PDF/A (تنسيق أرشيفي)
- التشفير وتعيين كلمات المرور
- استخراج النص والصور من PDF
- العمل مع النماذج (AcroForms)
- تحرير ملفات PDF الموجودة (إضافة/حذف الصفحات)
3. wkhtmltopdf — HTML إلى PDF عبر C++
wkhtmltopdf هي أداة سطر أوامر تقوم بتحويل صفحات HTML إلى PDF باستخدام محرك WebKit. بالنسبة لـ C++، يمكنك استدعاؤها عبر system() أو <