توليد تقارير PDF بلغة C# (.NET): نظرة عامة على أفضل المكتبات
إنشاء تقارير PDF هي إحدى المهام الأكثر شيوعًا في التطبيقات المؤسسية بلغة C# (.NET). سواء كان ذلك لتصدير البيانات للعميل، أو إنشاء فاتورة، أو لوحة تحليلية معقدة - ستحتاج إلى أداة موثوقة. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: iTextSharp (وخليفته iText 7)، QuestPDF، وPDFsharp. ستتعرف على أي منها تختار لمهمة محددة، وسترى أمثلة عملية على الكود.
1. iTextSharp / iText 7 - الكلاسيكية والقوة
iTextSharp هو منفذ لمكتبة Java الشهيرة iText لمنصة .NET. الإصدار iText 7 (حزمة NuGet itext7) أعيدت كتابته بالكامل ويدعم واجهة برمجة تطبيقات حديثة. تتيح المكتبة إنشاء PDF من الصفر، وتحرير الملفات الموجودة، وإضافة العلامات المائية، والنماذج، والإشارات المرجعية، والبيانات الوصفية.
الإمكانيات الرئيسية:
- تحكم كامل في بنية المستند (الفقرات، الجداول، الصور، القوائم).
- دعم الخطوط، بما في ذلك السيريلية (TrueType).
- العمل مع النماذج (AcroForms) والتوقيعات الرقمية.
- الترخيص: AGPL (الاستخدام التجاري يتطلب شراء ترخيص).
مثال: إنشاء تقرير بسيط مع جدول
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreateReport(string filePath){ using (var writer = new PdfWriter(filePath)) using (var pdf = new PdfDocument(writer)) using (var document = new Document(pdf)) { document.Add(new Paragraph("تقرير المبيعات") .SetFontSize(20).SetBold());
Table table = new Table(3); table.AddCell("المنتج"); table.AddCell("الكمية"); table.AddCell("السعر");
table.AddCell("لابتوب"); table.AddCell("10"); table.AddCell("75000");
table.AddCell("فأرة"); table.AddCell("50"); table.AddCell("1500");
document.Add(table); }}2. QuestPDF - واجهة برمجة تطبيقات حديثة وموجزة
QuestPDF هي مكتبة حديثة نسبيًا (منذ عام 2021) تكتسب شعبية سريعة. ميزتها الرئيسية هي Fluent API، التي تشبه العمل مع HTML/CSS. يصبح الكود قابلًا للقراءة ومضغوطًا. QuestPDF مجانية تمامًا للاستخدام التجاري (ترخيص MIT).
الميزات:
- وصف تخطيطي تصريحي: حاويات، أعمدة، صفوف.
- دعم مدمج للأنماط والألوان والحدود والخلفيات.
- التفاف النص التلقائي وضبط الجداول.
- تصدير إلى PDF و XPS.
مثال: إنشاء تقرير باستخدام QuestPDF
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
public void CreateInvoice(string filePath){ Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12));
page.Header().Text("فاتورة رقم 123") .SemiBold().FontSize(24).FontColor(Colors.Blue.Darken2);
page.Content().Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(100); columns.RelativeColumn(); columns.ConstantColumn(80); });
table.Header(header => { header.Cell().Text("الاسم"); header.Cell().Text("الوصف"); header.Cell().Text("المبلغ"); });
table.Cell().Text("استشارة"); table.Cell().Text("تطوير البنية"); table.Cell().Text