توليد PDF في Kotlin: المكتبات والأدوات (iText, Apache PDFBox)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

توليد PDF في Kotlin: نظرة عامة على المكتبات وأمثلة عملية



Kotlin، كلغة حديثة لـ JVM، توفر للمطورين أدوات قوية للعمل مع مستندات PDF. بفضل التوافق الكامل مع نظام Java البيئي، يمكنك استخدام المكتبات المجربة مثل iText و Apache PDFBox، بالإضافة إلى أطر Kotlin الحديثة. في هذه المقالة، سنستعرض الطرق الرئيسية لتوليد PDF في Kotlin، ونقدم أمثلة على الأكواد، ونقارن بين الحلول الشائعة.



لماذا Kotlin للعمل مع PDF؟



تقدم Kotlin عدة مزايا مقارنة بـ Java عند العمل مع PDF:

  • بناء جملة موجز — كود نموذجي أقل لإنشاء المستندات
  • أمان من القيم الفارغة (Null-safety) — يقلل من مخاطر الأخطاء عند التعامل مع الحقول القابلة للفارغية
  • دوال التوسيع (Extension functions) — تسمح بتوسيع وظائف المكتبات
  • منشئات DSL — مثالية لوصف هيكل PDF
  • توافق كامل — جميع مكتبات Java تعمل دون تغييرات


المكتبات الرئيسية لتوليد PDF



1. iText (iText 7 / iText 8)



iText هي المكتبة التجارية الأكثر شيوعًا للعمل مع PDF. يمكن الوصول إليها من Kotlin عبر Java-interop. تتضمن وحدات:

  • kernel — العمليات الأساسية مع PDF
  • layout — بناء المستند عالي المستوى
  • html2pdf — تحويل HTML إلى PDF
  • pdfa — دعم PDF/A


مثال لإنشاء PDF بسيط باستخدام iText 7 في Kotlin:



import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraphimport java.io.FileOutputStream

fun createSimplePdf() { val writer = PdfWriter(FileOutputStream("hello_kotlin.pdf")) val pdfDoc = PdfDocument(writer) val document = Document(pdfDoc) document.add(Paragraph("مرحبًا، Kotlin!")) document.add(Paragraph("هذا PDF تم إنشاؤه باستخدام iText 7")) document.close() println("تم إنشاء PDF بنجاح")}


2. Apache PDFBox



Apache PDFBox هي مكتبة مجانية مفتوحة المصدر. مناسبة تمامًا للمهام الأساسية: الإنشاء، التحرير، استخراج النص. تُستخدم في Kotlin عبر Java API.



مثال باستخدام PDFBox:



import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Fontimport java.io.File

fun createPdfWithBox() { val document = PDDocument() val page = PDPage() document.addPage(page) val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f) contentStream.newLineAtOffset(50f, 700f) contentStream.showText("PDFBox + Kotlin = ❤") contentStream.endText() contentStream.close() document.save(File("pdfbox_example.pdf")) document.close() println("تم حفظ المستند")}


3. Kotlin DSL لـ PDF (KPDF)



KPDF هي مكتبة Kotlin أصلية تستخدم منشئات DSL. تسمح بوصف المستند بأسلوب تصريحي:



// مثال باستخدام DSL افتراضي (تكيف مع المكتبات الحقيقية)fun generateInvoice() {    pdfDocument {        page {            paragraph("فاتورة رقم 123") {                fontSize = 24                bold()            }            table {                row { cell("المنتج"); cell("السعر") }                row { cell("استشارة Kotlin"); cell("5000 روبل") }            }        }    }.save("invoice.pdf")}

توصيات