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

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

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

ابدأ الدورة

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



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



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

تجمع Go بين الأداء العالي للغة المترجمة وسهولة التطوير. بفضل الدعم المدمج للتوازي (الغوروتينات) وإدارة الذاكرة الفعالة، يتم توليد PDF حتى على كميات كبيرة من البيانات بسرعة. بالإضافة إلى ذلك، فإن الكتابة الثابتة والمكتبة القياسية الغنية تجعل الكود موثوقًا وقابلًا للتنبؤ.



المكتبات الرئيسية لتوليد PDF في Go



1. gofpdf — مكتبة بسيطة وخفيفة الوزن

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



التثبيت:

go get github.com/jung-kurt/gofpdf


مثال: إنشاء PDF بسيط مع نص وصورة

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, "مرحباً، عالم PDF!") pdf.ImageOptions("logo.png", 10, 20, 30, 0, false, gofpdf.ImageOptions{ImageType: "PNG"}, 0, "") err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}


المزايا: واجهة برمجة تطبيقات بسيطة، حجم صغير، لا يتطلب تبعيات خارجية، دعم Unicode (UTF-8).
العيوب: دعم محدود للتخطيطات المعقدة، لا يوجد عرض HTML مدمج.



2. maroto — مكتبة عالية المستوى للتقارير

Maroto مبنية فوق gofpdf وتضيف مفهوم "الشبكة" (grid) لإنشاء تخطيطات معقدة: الجداول والأعمدة والتسميات والشعارات. مثالية للفواتير والإيصالات والتقارير.



التثبيت:

go get github.com/johnfercher/maroto/v2


مثال: إنشاء فاتورة مع جدول

package main

import ( "github.com/johnfercher/maroto/v2" "github.com/johnfercher/maroto/v2/pkg/components/col" "github.com/johnfercher/maroto/v2/pkg/components/row" "github.com/johnfercher/maroto/v2/pkg/components/text" "github.com/johnfercher/maroto/v2/pkg/core")

func main() { m := maroto.New() m.AddRow(20, text.NewCol(12, "فاتورة رقم 123")) m.AddRow(10, text.NewCol(12, "التاريخ: 2024-01-15")) // جدول headers := []string{"المنتج", "الكمية", "السعر", "المجموع"} rows := [][]string{ {"حاسوب محمول", "2", "50000", "100000"}, {"فأرة", "5", "1500", "7500"}, } m.AddRow(10, col.New(12).Add(text.New("جدول المنتجات"))) // للجدول استخدم مكون table // m.AddTable(headers, rows) doc, _ := m.Build() doc.Save("invoice.pdf")}


المزايا: أسلوب تصريحي، مكونات جاهزة (جداول، رموز QR، رسوم بيانية)، محاذاة تلقائية.
العيوب: تبعيات أكثر من gofpdf، انخفاض طفيف في الأداء على التخطيطات المعقدة.



3. unipdf — مكتبة تجارية ذات إمكانيات متقدمة

UniPDF (من شركة UniDoc) هو حل احترافي للعمل مع PDF: الإنشاء والتحرير واستخراج البيانات والتوقيع والتشفير. يدعم تحويل HTML إلى PDF (عبر WebKit).



التثبيت:

go get github.com/unidoc/unipdf/v3


م

توصيات