توليد PDF في C# (.NET): مراجعة المكتبات وأمثلة عملية
يعد توليد مستندات PDF من أكثر المهام شيوعًا في التطوير المؤسسي باستخدام C#. التقارير، الفواتير، الإيصالات، العقود - كل هذا يمكن إنشاؤه برمجيًا بسهولة. في نظام .NET البيئي، توجد عدة مكتبات ناضجة، لكل منها نقاط قوتها الخاصة. في هذه المقالة، سنستعرض أربع أدوات رئيسية، ونعرض أمثلة على الكود، ونساعدك في اختيار الأنسب لمشروعك.
1. iTextSharp / iText 7 for .NET
iText - ربما أشهر مكتبة للعمل مع PDF. كانت نسخة iTextSharp هي المنفذ من مكتبة Java لـ .NET Framework. حاليًا، النسخة النشطة هي iText 7 for .NET (ترخيص AGPL للمشاريع مفتوحة المصدر أو ترخيص تجاري).
الإمكانيات:
- إنشاء PDF من الصفر
- العمل مع القوالب (PdfTemplate)
- إضافة الصور، الجداول، القوائم
- دعم Unicode، السيريلية
- التوقيع الرقمي، التشفير
مثال: مستند بسيط مع جدول
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreateSimplePdf(string filePath){ using (PdfWriter writer = new PdfWriter(filePath)) using (PdfDocument pdf = new PdfDocument(writer)) using (Document doc = new Document(pdf)) { doc.Add(new Paragraph("مرحبًا بالعالم!")); Table table = new Table(3); table.AddCell("الاسم"); table.AddCell("العمر"); table.AddCell("المدينة"); table.AddCell("آنا"); table.AddCell("28"); table.AddCell("موسكو"); doc.Add(table); }}2. PDFsharp / MigraDoc
PDFsharp - مكتبة خفيفة الوزن مفتوحة المصدر (MIT). بالاقتران مع MigraDoc، تتيح وصف المستندات بأسلوب "معالج النصوص": فقرات، أنماط، رؤوس وتذييلات. مناسبة تمامًا لتوليد التقارير البسيطة دون رسومات معقدة.
المزايا:
- منخفضة من حيث منحنى التعلم
- دعم جيد للسيريلية
- لا تتطلب ترخيصًا
- تعمل مع .NET Framework و .NET Core
مثال: إنشاء مستند عبر MigraDoc
using MigraDoc.DocumentObjectModel;using MigraDoc.Rendering;
public void CreateWithMigraDoc(string filePath){ Document doc = new Document(); Section section = doc.AddSection(); Paragraph para = section.AddParagraph("عنوان التقرير"); para.Format.Font.Size = 18; para.Format.Font.Bold = true; section.AddParagraph("هذا هو نص التقرير. تم إنشاؤه باستخدام PDFsharp و MigraDoc."); PdfDocumentRenderer renderer = new PdfDocumentRenderer(true); renderer.Document = doc; renderer.RenderDocument(); renderer.PdfDocument.Save(filePath);}3. QuestPDF
QuestPDF - مكتبة حديثة بواجهة fluent (بناء جملة مشابه لـ LINQ). موزعة بموجب ترخيص MIT (مجاني للاستخدام التجاري). تتطور بنشاط، وتدعم .NET 6/7/8.
الميزات الرئيسية:
- بناء تخطيط تصريحي
- تقسيم تلقائي للصفحات
- دعم الصور، SVG، رموز QR
- أداء عالٍ
مثال: توليد فاتورة
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
public byte[] GenerateInvoice(){ return Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12)); page.Header().Element(ComposeHeader); page.Content().Element(ComposeContent); page.Footer().AlignCenter().Text(x => {