توليد PDF في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
يعد توليد مستندات PDF إحدى المهام الشائعة في التطبيقات الحديثة: بدءًا من إنشاء التقارير والفواتير وصولاً إلى تكوين الشهادات والكتب الإلكترونية. Kotlin، بفضل إيجازها وتوافقها مع Java، توفر للمطورين إمكانية الوصول إلى مكتبات Java القوية للعمل مع PDF. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: iText وApache PDFBox وOpenPDF، وسنقدم أمثلة على الكود بلغة Kotlin.
1. iText - مكتبة قوية ومرنة
iText هي واحدة من أشهر المكتبات لإنشاء ومعالجة مستندات PDF على JVM. وهي تدعم التنسيق المعقد والجداول والصور والعلامات المائية والتشفير وغير ذلك الكثير. بالنسبة لـ Kotlin، تتوفر حزمة رسمية iText7 مع امتدادات Kotlin.
الإضافة (Gradle)
dependencies { implementation("com.itextpdf:itext7-core:7.2.5") implementation("com.itextpdf:itext7-kotlin-extensions:1.0.0")}مثال: إنشاء PDF بسيط مع نص
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun createSimplePdf(fileName: String) { val writer = PdfWriter(fileName) val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("مرحباً، عالم PDF في Kotlin!")) document.add(Paragraph("هذا مثال على استخدام iText7."))
document.close() println("تم إنشاء PDF: $fileName")}
fun main() { createSimplePdf("example_itext.pdf")}مثال: جدول مع بيانات
import com.itextpdf.layout.element.Tableimport com.itextpdf.layout.element.Cell
fun createTablePdf(fileName: String) { val writer = PdfWriter(fileName) val pdf = PdfDocument(writer) val document = Document(pdf)
val table = Table(3) // 3 أعمدة table.addHeaderCell("الاسم") table.addHeaderCell("العمر") table.addHeaderCell("المدينة")
table.addCell("آنا") table.addCell("28") table.addCell("موسكو")
table.addCell("إيفان") table.addCell("35") table.addCell("سانت بطرسبرغ")
document.add(table) document.close() println("تم إنشاء PDF مع جدول: $fileName")}2. Apache PDFBox - بديل خفيف ومجاني
Apache PDFBox هي مكتبة مفتوحة المصدر (ترخيص Apache 2.0). وهي مثالية للمهام الأساسية: إنشاء المستندات، استخراج النص، ملء النماذج. على عكس iText، لا تتطلب PDFBox رسوم ترخيص للاستخدام التجاري.
الإضافة (Gradle)
dependencies { implementation("org.apache.pdfbox:pdfbox:2.0.27")}مثال: إنشاء PDF مع نص
import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Font
fun createPdfWithPdfBox(fileName: String) { val document = PDDocument() val page = PDPage() document.addPage(page)
val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f) contentStream.newLineAtOffset(100f, 700f) contentStream.showText("PDFBox + Kotlin = رائع!") contentStream.endText() contentStream.close()
document.save(fileName) document.close() println("تم إنشاء PDF: $fileName")}مثال: إضافة صورة
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject
fun createPdfWithImage(fileName: String, imagePath: String) { val document = PDDocument() val