توليد PDF في Go (Golang): المكتبات والأمثلة

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

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

ابدأ الدورة

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



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



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

Go هي لغة مترجمة بأداء ممتاز ونموذج بسيط للتوازي. بالنسبة لمهام توليد PDF، يعني هذا:

  • معالجة سريعة لكميات كبيرة من البيانات
  • تكامل سهل مع خوادم الويب (net/http)
  • إمكانية توازي توليد عدة مستندات
  • عدم وجود تبعيات خارجية (الملف الثنائي يشمل كل ما هو ضروري)


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



1. gofpdf — مكتبة بسيطة وشائعة

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



مثال لإنشاء PDF بسيط باستخدام 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, "مرحباً بالعالم!") pdf.OutputFileAndClose("hello.pdf")}


الإمكانيات الرئيسية لـ gofpdf:

  • دعم UTF-8 (يتطلب تضمين خطوط TrueType)
  • فواصل صفحات تلقائية
  • رسومات متجهة (خطوط، منحنيات، تعبئة)
  • تضمين الصور (JPEG، PNG، GIF)
  • جداول ببيانات ديناميكية


2. UniPDF — مكتبة تجارية قوية

UniPDF (سابقاً FoxyUtils) هو حل احترافي للعمل مع PDF في Go. المكتبة مفتوحة المصدر، ولكن للاستخدام التجاري يلزم ترخيص. تدعم UniPDF ليس فقط الإنشاء، بل أيضاً التحرير والتحويل واستخراج البيانات من PDF.



مثال لإنشاء PDF باستخدام UniPDF:

package main

import ( "os" "github.com/unidoc/unipdf/v3/creator")

func main() { c := creator.New() c.NewPage() // إضافة نص text := c.NewStyledParagraph() text.Append("مثال على مستند UniPDF") text.SetFontSize(18) c.Draw(text) // حفظ c.WriteToFile("unipdf_example.pdf")}


الإمكانيات الفريدة لـ UniPDF:

  • تحليل وتحرير كامل لملفات PDF الموجودة
  • دعم النماذج والتعليقات والعلامات المرجعية
  • تحويل HTML إلى PDF
  • العمل مع التوقيعات الرقمية
  • استخراج النصوص والصور


3. Maroto — مولد PDF يعتمد على المكونات البصرية

Maroto مبني على gofpdf ويقدم نهجاً عالي المستوى باستخدام مفهوم "الشبكة" (grid). هذا مناسب لإنشاء التقارير والفواتير والمستندات المنظمة الأخرى.



مثال باستخدام Maroto:

package main

import ( "fmt" "github.com/johnfercher/maroto/v2/pkg/consts/align" "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle" "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.Row(20, func() { m.Col(12, func() { m.Text("فاتورة رقم 123", props.Text{ Style: fontstyle.Bold, Align: align.Center, }) }) }) document, err := m.Generate() if err != nil {

توصيات