توليد PDF في C# (.NET): نظرة شاملة على المكتبات والأدوات
إنشاء مستندات PDF هي إحدى المهام الأكثر شيوعًا في التطوير المؤسسي. التقارير، الفواتير، الإشعارات، العقود - كلها تتطلب أداة موثوقة للتوليد. في نظام C# (.NET) البيئي، توجد عدة مكتبات قوية، لكل منها خصائصها. في هذه المقالة، سنستعرض الخيارات الأكثر شيوعًا، مميزاتها وعيوبها، وسنقدم أمثلة على الكود.
1. iTextSharp / iText 7 لـ .NET
iText هو المعيار الفعلي في عالم توليد PDF. المكتبة موجودة منذ عام 2000 وتتطور بنشاط. بالنسبة لـ .NET، الإصدار المتاح هو iText 7 (حزمة NuGet itext7).
الإمكانيات:
- تحكم كامل في المحتوى: النصوص، الجداول، الصور، التعليقات التوضيحية.
- العمل مع النماذج (AcroForms)، التوقيعات الرقمية، التشفير.
- دعم PDF/A (التخزين الأرشيفي).
- أداء عالٍ.
العيوب:
- API معقد (عمل منخفض المستوى مع الإحداثيات).
- الاستخدام التجاري يتطلب ترخيصًا مدفوعًا (AGPL للمشاريع مفتوحة المصدر).
مثال لإنشاء PDF بسيط:
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreatePdf(string filePath){ using (var writer = new PdfWriter(filePath)) using (var pdf = new PdfDocument(writer)) using (var document = new Document(pdf)) { document.Add(new Paragraph("مرحبًا بالعالم!")); document.Add(new Paragraph("هذا PDF تم إنشاؤه باستخدام iText 7.")); }}2. PDFsharp
PDFsharp هي مكتبة خفيفة الوزن مفتوحة المصدر لـ .NET (يوجد أيضًا إصدار لـ GDI+). مناسبة تمامًا للمهام البسيطة: إنشاء مستندات تحتوي على نصوص، جداول، صور.
الإمكانيات:
- API بسيط وبديهي.
- دعم الخطوط (بما في ذلك السيريلية).
- العمل مع العناصر الرسومية البدائية (خطوط، أشكال).
- مجانية (ترخيص MIT).
العيوب:
- دعم محدود للعناصر المعقدة (النماذج، الإشارات المرجعية).
- أبطأ من iText في الأحجام الكبيرة.
مثال:
using PdfSharp.Pdf;using PdfSharp.Drawing;
public void CreatePdf(string filePath){ using (var document = new PdfDocument()) { var page = document.AddPage(); using (var gfx = XGraphics.FromPdfPage(page)) { var font = new XFont("Arial", 20, XFontStyle.Regular); gfx.DrawString("مرحبًا بالعالم!", font, XBrushes.Black, new XPoint(40, 100)); } document.Save(filePath); }}3. QuestPDF
QuestPDF هي مكتبة حديثة مع API سلس (fluent API)، مستوحاة من مفهوم "التخطيط أولاً" (layout-first). تسمح بوصف هيكل المستند بشكل تصريحي، مما يبسط بشكل كبير إنشاء التخطيطات المعقدة.
الإمكانيات:
- أسلوب تصريحي (مثل WPF أو HTML).
- تقسيم تلقائي للصفحات (pagination).
- دعم الجداول، الرؤوس، التذييلات.
- إصدار مجاني مع قيود (حتى 10 صفحات).
العيوب:
- الإصدار المجاني محدود.
- مرونة أقل مقارنة بـ iText (صعوبة في رسم الرسومات المخصصة).
مثال:
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
public void CreatePdf(string filePath){ Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(30); page.Content().Column(col => { col.Item().Text("مرحبًا بالعالم!").FontSize(20); col.Item().Text("هذا QuestPDF.").FontSize(14); }); });