إنشاء تقارير PDF بلغة C# (.NET): نظرة عامة على المكتبات وأمثلة
في التطوير الحديث على منصة .NET، يُعد إنشاء مستندات PDF من المهام الشائعة. سواء كان ذلك لإنشاء فواتير، تقارير، إشعارات شحن، أو لوحات تحليلية، توفر لغة C# أدوات قوية للعمل مع PDF. في هذه المقالة، سنستعرض ثلاث مكتبات شائعة: iTextSharp، QuestPDF و PdfSharp. ستتعرف على أي منها تختار لمهمة محددة، وسترى أمثلة عملية للكود.
1. iTextSharp (iText 7 لـ .NET)
iTextSharp هو إصدار من مكتبة iText الشهيرة بلغة Java لمنصة .NET. وهو الحل الأكثر نضجًا ووظيفية، حيث يدعم التخطيطات المعقدة، الجداول، الصور، التعليقات التوضيحية، والتوقيعات الرقمية. ومع ذلك، يتطلب الاستخدام التجاري شراء ترخيص (AGPL للمشاريع مفتوحة المصدر).
التثبيت
dotnet add package itext7مثال: تقرير بسيط مع جدول
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreatePdfReport(){ string filePath = "report.pdf"; using (PdfWriter writer = new PdfWriter(filePath)) using (PdfDocument pdf = new PdfDocument(writer)) using (Document document = new Document(pdf)) { document.Add(new Paragraph("تقرير المبيعات لشهر مارس") .SetBold().SetFontSize(18));
Table table = new Table(3); table.AddCell("المنتج"); table.AddCell("الكمية"); table.AddCell("السعر"); table.AddCell("لابتوب"); table.AddCell("12"); table.AddCell("75,000 ₽"); table.AddCell("شاشة"); table.AddCell("5"); table.AddCell("32,000 ₽");
document.Add(table); }}المزايا: مرونة قصوى، دعم الهياكل المعقدة، التوقيعات الرقمية.
العيوب: واجهة برمجة تطبيقات معقدة للمبتدئين، ترخيص للاستخدام التجاري.
2. QuestPDF
QuestPDF هي مكتبة حديثة بواجهة fluent ومحرك عرض مدمج. تتيح وصف المستند بأسلوب تصريحي مشابه لـ HTML/CSS. مثالية لإنشاء التقارير النموذجية ذات العناصر المتكررة.
التثبيت
dotnet add package QuestPDFمثال: فاتورة مع عنوان وجدول
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(20); page.Header().Text("فاتورة رقم 12345") .SemiBold().FontSize(20).FontColor(Colors.Blue.Darken2);
page.Content().Table(table => { table.ColumnsDefinition(columns => { columns.RelativeColumn(); columns.RelativeColumn(); columns.RelativeColumn(); });
table.Header(header => { header.Cell().Background(Colors.Grey.Lighten3).Text("الخدمة"); header.Cell().Background(Colors.Grey.Lighten3).Text("التكلفة"); header.Cell().Background(Colors.Grey.Lighten3).Text("الكمية"); });
table.Cell().Text("استشارة"); table.Cell().Text("5,000 ₽"); table.Cell().Text("2");
table.Cell().Text("تطوير"); table.Cell().Text("15,000 ₽"); table.Cell().Text("1"); });
page.Footer().AlignCenter().Text("شكرًا لتعاونكم!"); }); }).GeneratePdf();}المزايا: كود بسيط وقابل للقراءة، أداء ممتاز، مجاني للاستخدام التجاري
أيضاً في المكتبة
العمل مع التواريخ في Rust: نظرة عامة على مكتبات الوقت والتقويم
إرسال SMS باستخدام JavaScript (Node.js): مكتبات API وأمثلة كود
اختبار في JavaScript (Node.js): الأطر والأدوات
عميل Elasticsearch لـ C# (.NET): NEST و Elastic.Clients.Elasticsearch