توليد تقارير PDF بلغة Kotlin باستخدام iText 7
في التطوير الحديث، غالبًا ما تنشأ الحاجة لإنشاء مستندات PDF منظمة: تقارير، فواتير، عقود أو تحليلات. لغة Kotlin، بفضل إيجازها وتوافقها مع Java، مناسبة تمامًا لهذه المهمة. واحدة من أقوى وأشهر المكتبات للعمل مع PDF هي iText 7 (سابقًا iTextSharp لـ .NET). في هذه المقالة، سنشرح كيفية استخدامها لتوليد تقارير PDF احترافية بلغة Kotlin.
لماذا iText 7؟
- تحكم كامل في المحتوى: نصوص، جداول، صور، خطوط.
- أداء عالٍ: المكتبة محسّنة للعمل مع المستندات الكبيرة.
- متعددة المنصات: تعمل على JVM و Android والويب.
- الترخيص: AGPL للمشاريع مفتوحة المصدر أو ترخيص تجاري.
التثبيت (Gradle)
أضف التبعية في build.gradle.kts:
dependencies { implementation("com.itextpdf:itext7-core:7.2.5")}مثال أساسي: "Hello, PDF!"
لننشئ مستند PDF بسيطًا مع نص:
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun main() { val writer = PdfWriter("hello.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("مرحبًا، عالم PDF بلغة Kotlin!")) document.close() println("تم إنشاء PDF: hello.pdf")}إنشاء تقرير مع جداول وأنماط
للتقرير الحقيقي، نحتاج أكثر من مجرد نص. لنضف جدولًا وعناوين وأنماط:
import com.itextpdf.kernel.colors.ColorConstantsimport 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.Tableimport com.itextpdf.layout.properties.UnitValue
fun generateReport() { val writer = PdfWriter("report.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
// العنوان val title = Paragraph("التقرير الشهري للمبيعات") .setFontSize(20) .setBold() .setTextAlignment(com.itextpdf.layout.properties.TextAlignment.CENTER) document.add(title)
// الجدول val table = Table(UnitValue.createPercentArray(floatArrayOf(1f, 2f, 1.5f, 1.5f))) table.setWidth(UnitValue.createPercentValue(100))
// عناوين الجدول val headers = listOf("المعرف", "المنتج", "الكمية", "السعر") headers.forEach { header -> val cell = Cell().add(Paragraph(header).setBold()) cell.setBackgroundColor(ColorConstants.LIGHT_GRAY) table.addCell(cell) }
// البيانات val data = listOf( listOf("1", "حاسوب محمول", "3", "150000"), listOf("2", "فأرة", "10", "5000"), listOf("3", "لوحة مفاتيح", "5", "12500") ) data.forEach { row -> row.forEach { value -> table.addCell(Cell().add(Paragraph(value))) } }
document.add(table) document.close() println("تم إنشاء التقرير: report.pdf")}
fun main() { generateReport()}إضافة الصور والأنماط
غالبًا ما تحتاج التقارير إلى إدراج شعارات أو رسوم بيانية. iText 7 تدعم الصور:
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Imageimport com.itextpdf.io.image.ImageDataFactory
fun addImageExample() { val writer = PdfWriter("report_with_image.pdf") val pdf = PdfDocument(writer) val document = Documen أيضاً في المكتبة
توليد تقارير PDF باستخدام JavaScript (Node.js): نظرة عامة على المكتبات وأمثلة الكود
GraphQL في C# (.NET): مكتبات Hot Chocolate و GraphQL.NET لإنشاء API
تسلسل الكائنات في Swift (iOS/macOS): Codable وJSON وPropertyList
قوائم انتظار المهام في Java: نظرة عامة وتنفيذ مع java.util.concurrent
Humanizer C# (.NET): دليل شامل مع أمثلة تطبيقية