توليد تقارير PDF بلغة Go (Golang): نظرة عامة على المكتبات وأمثلة الأكواد
Go (Golang) هي لغة حديثة ومترجمة، يتم اختيارها بشكل متزايد لإنشاء تطبيقات الخادم عالية التحميل والخدمات المصغرة. إحدى المهام النموذجية في مثل هذه الأنظمة هي إنشاء تقارير PDF (فواتير، عقود، لوحات إحصائية). في هذه المقالة، سنستعرض ثلاث مكتبات شائعة لتوليد PDF بلغة Go، ونقاط قوتها، ونقدم أمثلة جاهزة للأكواد.
1. gofpdf — الكلاسيكية لإنشاء PDF من الصفر
مكتبة gofpdf (التي تتطور الآن باسم jung-kurt/gofpdf أو الشوكة go-pdf/fpdf) هي نسخة من مكتبة FPDF المعروفة بلغة PHP. تتيح لك إنشاء مستندات PDF بدون تبعيات خارجية، باستخدام أدوات Go القياسية فقط.
التثبيت
go get github.com/jung-kurt/gofpdfمثال: فاتورة بسيطة
package main
import ( "github.com/jung-kurt/gofpdf")
func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetFont("Arial", "B", 16) pdf.AddPage() pdf.CellFormat(190, 10, "فاتورة رقم 123 بتاريخ 01.01.2025", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "السلعة: حاسوب محمول", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "السعر: 120,000 روبل", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "الإجمالي: 120,000 روبل", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}المزايا: تبعيات قليلة، تحكم كامل في كل عنصر، دعم Unicode (عبر AddUTF8Font).
العيوب: واجهة برمجة منخفضة المستوى — للتقارير المعقدة ستحتاج إلى كتابة الكثير من الأكواد يدويًا.
2. maroto — توليد عالي المستوى مع جداول وأنماط
Maroto مبنية فوق gofpdf، ولكنها تقدم واجهة برمجة أكثر ملاءمة: جداول، شبكات، محاذاة تلقائية، ودعم مدمج للخطوط. مثالية للتقارير النموذجية: الفواتير، القوائم، قوائم الأسعار.
التثبيت
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.New() m.SetPageMargins(10, 10, 10) // العنوان m.Row(10, func() { m.Col(12, func() { m.Text("تقرير المبيعات", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // الجدول header := []string{"السلعة", "الكمية", "السعر"} data := [][]string{ {"شاشة", "2", "30,000"}, {"لوحة مفاتيح", "5", "7,500"}, } m.TableList(header, data, props.TableList{ HeaderProp: props.TableListContent{ Style: props.Bold, Size: 10, }, ContentProp: props.TableListContent{ Size: 9, }, }) document, _ := m.Generate() document.Save("report.pdf")}المزايا: تطوير سريع، أنماط مدمجة، تقسيم تلقائي للصفحات.
العيوب: مرونة أقل للتخطيطات غير القياسية.
3. wkhtmltopdf — تحويل HTML إلى PDF عبر غلاف Go
إذا كان لديك بالفعل قوالب HTML (مثل Bootstrap)، فمن الأسهل استخدام wkhtmltopdf. هذه ليست مكتبة Go، بل أداة سطر أوامر، ولكن يوجد غلاف Go لها باسم go-wkhtmltopdf. تستقبل سلسلة HTML وتعيد PDF.
التثبيت
# قم أولاً بتثبيت wkhtmltopdf: https://wkhtmltopdf.org/downloads.htmlgo get github.com/SebastiaanKlippert/go-wkhtmltopdf