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

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

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

ابدأ الدورة

توليد 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() أو <

توصيات