توليد PDF في Java: نظرة عامة على مكتبات iText وApache PDFBox وOpenPDF
إنشاء مستندات PDF هي إحدى المهام الشائعة في التطبيقات المؤسسية وتطبيقات الويب بلغة Java: بدءًا من إنشاء التقارير والفواتير وصولاً إلى تصدير البيانات وإنشاء الكتب الإلكترونية. في Java، توجد العديد من المكتبات الناضجة، لكل منها نقاط قوتها الخاصة. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: iText وApache PDFBox وOpenPDF، وسنقدم أمثلة على الكود ونساعدك في اختيار الأداة المناسبة.
1. iText — قوي ولكن مع ترخيص تجاري
iText هي المكتبة الأكثر شيوعًا للعمل مع PDF. توفر تحكمًا كاملاً في المحتوى: النصوص والصور والجداول والنماذج والعلامات المائية والتوقيعات. بدءًا من الإصدار 5.5.x، يتم توزيع iText بموجب ترخيص مزدوج AGPL (مجاني لمشاريع مفتوحة المصدر) وتجاري (للبرمجيات الاحتكارية). الإصدار 7.x (iText 7) هو أحدث وأكثر نمطية وأداءً عاليًا.
مثال: إنشاء PDF بسيط بنص (iText 7)
import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Paragraph;
public class CreatePdfWithIText { public static void main(String[] args) throws Exception { String dest = "output_itext.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); document.add(new Paragraph("مرحبًا، عالم PDF!")); document.add(new Paragraph("تم إنشاؤه باستخدام iText 7.")); document.close(); System.out.println("تم إنشاء PDF بنجاح: " + dest); }}إيجابيات iText:
- أقصى مرونة: دعم الجداول والقوائم والأنماط والخطوط والصور.
- العمل مع PDF/A والتشفير والتوقيعات الرقمية.
- أداء عالٍ وجودة عرض ممتازة.
سلبيات:
- ترخيص معقد (AGPL) — يتطلب شراء للاستخدام التجاري.
- واجهة برمجة تطبيقات (API) ضخمة تتطلب التعلم.
2. Apache PDFBox — مجاني ومفتوح المصدر
Apache PDFBox هي مكتبة مفتوحة المصدر (ترخيص Apache 2.0) تتيح إنشاء وتحرير واستخراج محتوى PDF. على عكس iText، لا تتطلب PDFBox ترخيصًا تجاريًا للمشاريع الاحتكارية. كما تدعم العمل مع النماذج والتشفير وتضمين الخطوط.
مثال: إنشاء PDF بنص (PDFBox 2.x)
import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class CreatePdfWithPdfBox { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page); try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { contentStream.beginText(); contentStream.setFont(PDType1Font.HELVETICA, 14); contentStream.newLineAtOffset(50, 700); contentStream.showText("مرحبًا، عالم PDF!"); contentStream.newLineAtOffset(0, -20); contentStream.showText("تم إنشاؤه باستخدام Apache PDFBox."); contentStream.endText(); } document.save("output_pdfbox.pdf"); System.out.println("تم إنشاء PDF بنجاح: output_pdfbox.pdf"); } }}إيجابيات Apache PDFBox:
- مجاني تمامًا (ترخيص Apache 2.0) — مناسب لأي مشروع.
- دعم استخراج النصوص والصور والبيانات الوصفية.