توليد تقارير PDF بلغة Go: نظرة على المكتبات وأمثلة الكود

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

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

ابدأ الدورة

توليد تقارير PDF بلغة Go (Golang): نظرة على المكتبات وأمثلة عملية



Go (Golang) هي لغة حديثة ومترجمة، مثالية لبناء تطبيقات الخادم عالية التحميل، والخدمات المصغرة، وأدوات سطر الأوامر. من المهام الشائعة في تطوير الويب توليد التقارير بصيغة PDF: الفواتير، وأذونات الشحن، ولوحات المعلومات التحليلية، أو الشهادات. في هذه المقالة، سنستعرض ثلاث مكتبات شائعة للعمل مع PDF بلغة Go، وإمكانياتها، وسنقدم أمثلة كود عملية.



لماذا Go لتوليد PDF؟

تقدم Go عدة مزايا: أداء عالٍ، سهولة النشر (ملف ثنائي واحد)، دعم مدمج للتوازي، ومكتبة قياسية غنية. لتوليد PDF، لا تحتاج إلى تثبيت بيئات تشغيل ضخمة (مثل Java أو .NET)، مما يجعل الحلول بلغة Go مدمجة وسريعة. ومع ذلك، على عكس Python حيث توجد مكتبات قوية مثل ReportLab، فإن نظام Go البيئي لـ PDF أكثر تنوعًا، ويعتمد اختيار الأداة على تعقيد التقرير.



1. gofpdf — توليد PDF أساسي

gofpdf هي نسخة من مكتبة FPDF الشهيرة بلغة PHP. تتيح لك إنشاء مستندات PDF "من الصفر": إضافة نصوص، صور، خطوط، جداول وخطوط. المكتبة لا تدعم قوالب HTML، لذلك يتم تحديد كل التنسيقات برمجيًا.



التثبيت:

go get github.com/jung-kurt/gofpdf


مثال: إنشاء فاتورة بسيطة

package main

import ( "github.com/jung-kurt/gofpdf")

func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "فاتورة رقم 123") pdf.Ln(12) pdf.SetFont("Arial", "", 12) pdf.Cell(40, 10, "التاريخ: 2024-01-15") pdf.Ln(10) pdf.Cell(40, 10, "السلعة: حاسوب محمول") pdf.Ln(10) pdf.Cell(40, 10, "المبلغ: 50,000 روبل") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


الإيجابيات: وزن خفيف، تحكم كامل في التموضع، دعم Unicode عبر خطوط TTF.
السلبيات: عدم وجود دعم مدمج لـ HTML، صعوبة في إنشاء تخطيطات معقدة.



2. maroto — إنشاء تقارير مبسط

Maroto مبني على gofpdf، لكنه يوفر واجهة برمجة تطبيقات عالية المستوى لإنشاء التقارير. أنت تعمل بمفاهيم "شبكة"، "صفوف"، "أعمدة"، "جداول". هذا يشبه العمل مع أطر عمل CSS.



التثبيت:

go get github.com/johnfercher/maroto/v2


مثال: جدول بالبيانات

package main

import ( "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")

func main() { m := maroto.NewMaroto(maroto.WithPageSize("A4")) m.RegisterHeader(func() { m.Row(20, func() { m.Col(12, func() { m.Text("تقرير المبيعات", props.Text{Bold: true, Size: 16}) }) }) })

headers := []string{"السلعة", "الكمية", "السعر"} contents := [][]string{ {"حاسوب محمول", "2", "100000"}, {"فأرة", "5", "2500"}, }

m.Table(headers, contents, props.Table{}) document, _ := m.Generate() _ = document.Save("report.pdf")}


الإيجابيات: أسلوب تصريحي، محاذاة تلقائية، دعم مدمج للجداول والرسوم البيانية.
السلبيات: مرونة أقل للتخطيطات غير القياسية مقارنة بـ gofpdf.



3. wkhtmltopdf — تحويل HTML إلى PDF

إذا كنت بحاجة لتحويل قالب HTML إلى PDF (على سبيل المثال، مع أنماط CSS)، استخدم wkhtmltopdf — وهي غلاف للأداة المساعدة wkhtmltopdf (WebKit). هذه ليست مكتبة Go خالصة، لكنها تتيح لك استخدام كامل قوة HTML/CSS لتصميم التقارير.



توصيات