توليد تقارير 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 لتصميم التقارير.