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

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

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

ابدأ الدورة

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



يعد توليد مستندات PDF من المهام الشائعة في التطبيقات الحديثة: بدءًا من إنشاء التقارير والفواتير وصولاً إلى تصدير البيانات. Kotlin، كونه لغة JVM حديثة، يوفر للمطورين إمكانية الوصول إلى مكتبات Java القوية للعمل مع PDF. في هذه المقالة، سنستعرض الأدوات الرئيسية لتوليد PDF في Kotlin، وميزاتها وأمثلة على استخدامها.



المكتبات الشائعة للعمل مع PDF في Kotlin



نظرًا لأن Kotlin متوافق تمامًا مع Java، يمكنك استخدام أي مكتبة Java للتعامل مع PDF. الخيارات الأكثر شيوعًا هي:



  • iText (الإصدار 7/8) — مكتبة تجارية مفتوحة المصدر (AGPL). توفر إمكانيات واسعة: إنشاء المستندات من الصفر، العمل مع النماذج، العلامات المائية، التشفير. للاستخدام التجاري، يلزم شراء ترخيص.
  • Apache PDFBox — مكتبة مجانية (Apache 2.0). تسمح بإنشاء PDF، استخراج النص، ملء النماذج. تعمل على مستوى أدنى من iText، ولكنها تمنح تحكمًا كاملاً في المحتوى.
  • OpenPDF — فرع من iText 4 (LGPL/MPL). مكتبة خفيفة للمهام الأساسية: إنشاء النصوص، الجداول، الصور. مناسبة للمشاريع البسيطة دون تنسيق معقد.
  • Jetpack Compose + PDF — نهج حديث: تصف واجهة المستخدم باستخدام Compose، ثم تحويلها إلى PDF باستخدام مكتبات Android (مثل android.graphics.pdf.PdfDocument). مناسب لتطبيقات Android.


إعداد المشروع وإضافة التبعيات



للتجربة، سنستخدم iText 7 و Apache PDFBox. أضف التبعيات في build.gradle.kts:



// لـ iText 7implementation("com.itextpdf:itext7-core:8.0.4")

// لـ Apache PDFBoximplementation("org.apache.pdfbox:pdfbox:3.0.2")


مثال 1: إنشاء PDF بنص (iText 7)



لننشئ مستندًا بسيطًا بعنوان وفقرة:



import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph

fun createSimplePdf() { val writer = PdfWriter("output.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

document.add(Paragraph("مرحبًا بالعالم!")) document.add(Paragraph("هذا PDF تم إنشاؤه باستخدام iText في Kotlin."))

document.close()}


مثال 2: العمل مع الجداول والسيريلية (iText 7)



لعرض السيريلية بشكل صحيح، يجب تحميل خط يدعم Unicode. نستخدم الخط القياسي FreeSans أو أي خط TTF:



import com.itextpdf.kernel.font.PdfFontFactoryimport com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Cellimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Table

fun createTableWithCyrillic() { val writer = PdfWriter("table.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

// تحميل خط يدعم السيريلية val font = PdfFontFactory.createFont("fonts/FreeSans.ttf", "Identity-H") document.setFont(font)

val table = Table(2) // عمودين table.addCell(Cell().add(Paragraph("الاسم"))) table.addCell(Cell().add(Paragraph("العمر"))) table.addCell(Cell().add(Paragraph("آنا"))) table.addCell(Cell().add(Paragraph("25"))) table.addCell(Cell().add(Paragraph("إيفان"))) table.addCell(Cell().add(Paragraph("30")))

document.add(table) document.close()}


مثال 3: إنشاء PDF مع صورة (Apache PDFBox)



يتطلب PDFBox عملاً أكثر تفصيلاً مع الإحداثيات، لكنه يوفر مرونة:




                
    
    

توصيات