توليد تقارير PDF بلغة C++: مكتبة libHaru

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

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

ابدأ الدورة

توليد تقارير PDF بلغة C++ باستخدام libHaru



في البرمجة الحديثة، غالبًا ما تنشأ الحاجة إلى إنشاء مستندات بصيغة PDF برمجيًا. قد تكون هذه تقارير، فواتير، إشعارات شحن، ملخصات تحليلية، أو مجرد حفظ البيانات بشكل عالمي. في لغة C++، توجد عدة مكتبات لهذا الغرض، ومن أشهرها libHaru (المعروفة أيضًا باسم Haru PDF).



libHaru هي مكتبة مفتوحة المصدر متعددة المنصات، مكتوبة بلغة C ولها واجهة C++ سهلة الاستخدام. تتيح لك إنشاء مستندات PDF دون اعتماديات خارجية (لا تتطلب تثبيت Ghostscript أو LaTeX أو أنظمة أخرى). تدعم المكتبة العمل مع النصوص (بما في ذلك Unicode عبر الترميزات)، تضمين الصور (PNG، JPEG)، رسم الخطوط، المستطيلات، الدوائر، بالإضافة إلى إنشاء التعليقات التوضيحية والروابط التشعبية.



التثبيت والربط



يمكن تنزيل الكود المصدري لـ libHaru من المستودع الرسمي على GitHub. يتم استخدام CMake للبناء. مثال على التثبيت على Linux:



git clone https://github.com/libharu/libharu.gitcd libharumkdir build && cd buildcmake ..makesudo make install


بعد التثبيت، قم بتضمين ملف الرأس والمكتبة في مشروعك:



#include <hpdf.h>

// الربط: -lhpdf


إنشاء مستند PDF بسيط



لننظر إلى مثال أساسي — إنشاء مستند بصفحة واحدة ونص. الكود بلغة C++:



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

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); if (!pdf) { fprintf(stderr, "خطأ في إنشاء PDF"); return 1; }

HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE);

HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", NULL); HPDF_Page_SetFontAndSize(page, font, 20);

HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 100, 400, "مرحبًا بالعالم! هذا تقرير PDF بلغة C++."); HPDF_Page_EndText(page);

HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("تم إنشاء PDF: output.pdf"); return 0;}


يقوم هذا الكود بإنشاء صفحة A4 أفقية، ويعرض نصًا باللون الأزرق (الافتراضي أسود) ويحفظ النتيجة. لاحظ: libHaru لا تدعم الأحرف السيريلية مباشرة في خطوط مثل Helvetica — للنص الروسي، ستحتاج إلى خط TrueType كما هو موضح أدناه.



العمل مع النص الروسي والخطوط



لعرض الأحرف السيريلية بشكل صحيح، يجب تحميل خط يدعم Unicode (مثل Arial أو Times New Roman). مثال:



// تحميل خط TrueType (يجب أن يكون الملف متاحًا)const char* font_path = "/usr/share/fonts/truetype/arial.ttf";HPDF_Font font = HPDF_GetFont(pdf, font_path, NULL);

// أو استخدام خط مدمج مع ترميز UTF-8HPDF_UseUTFEncodings(pdf);HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", "UTF-8");


الطريقة الأولى أكثر موثوقية، ولكنها تتطلب وجود ملف الخط على النظام المستهدف. الطريقة الثانية تعمل فقط مع بعض الخطوط المدمجة ولا تضمن دعمًا كاملاً للأحرف السيريلية.



رسم الجداول والعناصر الرسومية



لإنشاء التقارير، غالبًا ما يكون من الضروري رسم الجداول. تتيح libHaru رسم الخطوط والمستطيلات:



HPDF_Page_SetLineWidth(page, 1);HPDF_Page_SetRGBStroke(page, 0, 0, 0);

// رسم مستطيل (x, y, width, height)HPDF_Page_Rectangle(page, 50, 500, 200, 30);HPDF_Page_Stroke(page);

// رسم خطHPDF_Page_MoveTo(page, 50, 500);HPDF_Page_LineTo(page, 250, 500);HPDF_Page_Stroke(page);


يمكن دمج الخطوط والنصوص لإنشاء جدول كامل. للتقارير المعقدة ذات البيانات الديناميكية، من المفيد كتابة دالة مساعدة تأخذ مصفوفة من السلاسل النصية

توصيات