توليد PDF في Java: نظرة عامة على المكتبات الشائعة
إنشاء مستندات PDF من المهام الشائعة في التطوير المؤسسي والتعليمي بلغة Java. التقارير والفواتير والشهادات والمواد التعليمية - كل هذا يمكن تصديره بسهولة إلى PDF. في Java، توجد العديد من المكتبات الناضجة التي تسمح بإنشاء PDF من الصفر وتحرير الملفات الموجودة. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: iText وApache PDFBox وOpenPDF.
1. iText - قوي ولكن مع قيود ترخيص
iText هي أشهر مكتبة Java للعمل مع PDF. وهي موجودة منذ عام 2000 وتدعم جميع إمكانيات التنسيق تقريبًا: النصوص والجداول والصور والعلامات المائية والتعليقات التوضيحية والتوقيعات وغيرها الكثير.
ومع ذلك، فإن iText لديها فارق مهم: بدءًا من الإصدار 5.5.x، يتم إصدار المكتبة بموجب ترخيص مزدوج. للاستخدام التجاري، يلزم شراء ترخيص AGPL إذا لم تقم بتوزيع تطبيقك مفتوح المصدر. بالنسبة للمشاريع التعليمية المنشورة في المجال العام، فإن إصدار iText 5.x بموجب AGPL مناسب.
مثال على إنشاء PDF بسيط مع نص وجدول باستخدام iText 5:
import com.itextpdf.text.*;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfWriter;import java.io.FileOutputStream;
public class ITextExample { public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("example_itext.pdf")); document.open();
// العنوان document.add(new Paragraph("مثال PDF مع iText", FontFactory.getFont(FontFactory.HELVETICA_BOLD, 18)));
// الجدول PdfPTable table = new PdfPTable(3); table.addCell("العمود 1"); table.addCell("العمود 2"); table.addCell("العمود 3"); table.addCell("البيانات 1"); table.addCell("البيانات 2"); table.addCell("البيانات 3"); document.add(table);
document.close(); System.out.println("تم إنشاء PDF: example_itext.pdf"); }}2. Apache PDFBox - مجاني ومفتوح المصدر
Apache PDFBox هي مكتبة مجانية بالكامل بموجب ترخيص Apache 2.0. ليس لديها قيود على الاستخدام التجاري وتوفر واجهة برمجة تطبيقات منخفضة المستوى للعمل مع PDF. تسمح PDFBox بإنشاء المستندات واستخراج النص وملء النماذج والعمل مع الصور وحتى إنشاء تخطيطات معقدة.
الميزة الرئيسية لـ PDFBox هي المرونة وعدم وجود رسوم ترخيص. العيب هو أن واجهة برمجة التطبيقات أقل ملاءمة للمهام البسيطة مقارنة بـ iText وتتطلب المزيد من الكود للتنسيق.
مثال على إنشاء 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 org.apache.pdfbox.pdmodel.common.PDRectangle;import java.io.IOException;
public class PDFBoxExample { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(PDRectangle.A4); document.addPage(page);
try (PDPageContentStream cs = new PDPageContentStream(document, page)) { // العنوان cs.setFont(PDType1Font.HELVETICA_BOLD, 18); cs.beginText(); cs.newLineAtOffset(50, 750); cs.showText("مثال PDF مع PDFBox"); cs.endText();
// جدول بسيط (محاكاة) cs.setFont(PDType1Font.HELVETICA, 12); cs.setLineWidth(1f); // رسم خطوط الجدول يدويًا (مبسط) for (int i = 0; i < 4;