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

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

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

ابدأ الدورة

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



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



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



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

  • سرعة عالية — ملفات Go الثنائية تعمل بسرعة وتستخدم الذاكرة بكفاءة.
  • سهولة النشر — ملف تنفيذي واحد بدون تبعيات خارجية (باستثناء حالات wkhtmltopdf).
  • دعم مدمج للتزامن — يمكن معالجة طلبات متعددة لتوليد PDF في وقت واحد.
  • التوافق عبر المنصات — قم بالبناء مرة واحدة وشغّل على Linux و Windows و macOS.


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



دعنا نستعرض ثلاثة أساليب شائعة: تنفيذ خالص بلغة Go (gofpdf)، مكتبة تجارية احترافية (uniPDF)، وتحويل HTML إلى PDF (wkhtmltopdf).



1. gofpdf — مكتبة بسيطة وخفيفة



gofpdf (الآن github.com/jung-kurt/gofpdf) هي واحدة من أولى وأشهر المكتبات لإنشاء PDF بلغة Go الخالصة. لا تتطلب تبعيات خارجية وتسمح برسم النصوص والخطوط والصور والجداول برمجيًا.



مثال لإنشاء 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.ImageOptions("logo.png", 10, 20, 50, 0, false, gofpdf.ImageOptions{ImageType: "PNG", ReadDpi: true}, 0, "") // حفظ في ملف err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}


الإيجابيات:

  • مكتوبة بالكامل بلغة Go — لا حاجة لبرامج خارجية.
  • خفيفة الوزن وسهلة التثبيت.
  • دعم Unicode (بما في ذلك السيريلية) عبر الخطوط المدمجة.

السلبيات:

  • دعم محدود للتخطيطات المعقدة (على سبيل المثال، لا توجد حلول جاهزة للجداول المعقدة).
  • تحديد موضع العناصر يدويًا — مناسب للمستندات البسيطة.


2. UniPDF — حل احترافي للمهام المعقدة



UniPDF (من github.com/unidoc/unipdf/v3) هي مكتبة تجارية قوية توفر تحكمًا شبه كامل في PDF. تدعم إنشاء وتحرير وتحويل واستخراج البيانات من PDF. تتوفر نسخة مجانية مع قيود للمشاريع التعليمية وغير التجارية.



مثال لإنشاء تقرير مع جدول:



package main

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

func main() { // حدد الترخيص (مجاني للاختبار) license.SetMeteredKey("مفتاحك") c := creator.New() c.NewPage() // عنوان chapter := c.NewChapter("تقرير الشهر") chapter.Add(c.NewParagraph("بيانات المبيعات")) // جدول table := c.NewTable(3) table.SetColumnWidths(100, 100, 100) headers := []string{"المنتج", "الكمية", "المبلغ"} for _, h := range headers { cell := table.NewCell() cell.SetBackgroundColor(creator.Col

توصيات