Kotlin में PDF रिपोर्ट जनरेशन: iText, Apache PDFBox, OpenPDF

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में PDF रिपोर्ट जनरेशन: लाइब्रेरी का अवलोकन और व्यावहारिक उदाहरण

Kotlin, JVM के लिए एक आधुनिक भाषा होने के नाते, सर्वर एप्लिकेशन बनाने के लिए बेहतरीन है, जिसमें जटिल PDF रिपोर्ट जनरेट करना भी शामिल है। Python में ReportLab या FPDF लोकप्रिय हैं, वहीं Kotlin/Java इकोसिस्टम में समय-परीक्षित लाइब्रेरी का उपयोग किया जाता है: iText, Apache PDFBox और OpenPDF। इस लेख में हम इनमें से प्रत्येक पर चर्चा करेंगे, Kotlin में कोड उदाहरण दिखाएंगे और चयन के लिए सुझाव देंगे।

1. iText (संस्करण 7 और 8)

iText JVM पर PDF जनरेशन का डी-फैक्टो मानक है। यह लाइब्रेरी शुरू से दस्तावेज़ बनाने, फॉर्म, वॉटरमार्क और डिजिटल हस्ताक्षर के साथ काम करने के लिए एक शक्तिशाली API प्रदान करती है। हालांकि, संस्करण 7 से, iText AGPL (या वाणिज्यिक) लाइसेंस पर आ गया है, जो व्यावसायिक उपयोग के लिए महत्वपूर्ण है।

Kotlin में टेबल के साथ एक सरल PDF बनाने का उदाहरण:

import com.itextpdf.kernel.pdf.PdfDocument
import com.itextpdf.kernel.pdf.PdfWriter
import com.itextpdf.layout.Document
import com.itextpdf.layout.element.Paragraph
import com.itextpdf.layout.element.Table
import com.itextpdf.layout.property.UnitValue

fun generateReportItext(outputPath: String) {
    val writer = PdfWriter(outputPath)
    val pdf = PdfDocument(writer)
    val document = Document(pdf)

    // शीर्षक
    document.add(Paragraph("बिक्री रिपोर्ट").setFontSize(20))

    // तालिका
    val table = Table(UnitValue.createPercentArray(3)).useAllAvailableWidth()
    table.addCell("उत्पाद")
    table.addCell("मात्रा")
    table.addCell("मूल्य")
    table.addCell("लैपटॉप")
    table.addCell("10")
    table.addCell("75000")
    table.addCell("मॉनिटर")
    table.addCell("5")
    table.addCell("25000")

    document.add(table)
    document.close()
    println("PDF बन गया: $outputPath")
}

2. Apache PDFBox

PDFBox एक मुफ्त लाइब्रेरी (Apache 2.0 लाइसेंस) है जो न केवल PDF बनाने बल्कि टेक्स्ट निकालने, फॉर्म भरने, पेजों को इमेज में रेंडर करने की सुविधा देती है। इसका API iText की तुलना में थोड़ा निचले स्तर का है, लेकिन सामग्री पर पूर्ण नियंत्रण देता है।

इमेज और टेक्स्ट फ़ॉर्मेटिंग के साथ उदाहरण:

import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.pdmodel.PDPage
import org.apache.pdfbox.pdmodel.PDPageContentStream
import org.apache.pdfbox.pdmodel.font.PDType0Font
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject
import java.io.File

fun generateReportPdfBox(outputPath: String) {
    val document = PDDocument()
    val page = PDPage()
    document.addPage(page)

    val contentStream = PDPageContentStream(document, page)
    // फ़ॉन्ट लोड करें (TrueType)
    val font = PDType0Font.load(document, File("fonts/DejaVuSans.ttf"))
    contentStream.setFont(font, 14f)

    // टेक्स्ट
    contentStream.beginText()
    contentStream.newLineAtOffset(50f, 750f)
    contentStream.showText("जनवरी 2025 की रिपोर्ट")
    contentStream.endText()

    // इमेज (लोगो)
    val image = PDImageXObject.createFromFile("logo.png", document)
    contentStream.drawImage(image, 50f, 650f, 100f, 50f)

    contentStream.close()
    document.save(outputPath)
    document.close()
    println("PDFBox रिपोर्ट तैयार: $outputPath")
}

3. OpenPDF

OpenPDF, iText के पुराने संस्करण (LGPL) का एक फोर्क है जो पूरी तरह से मुफ्त है। यह सरल रिपोर्ट के लिए आदर्श है: टेक्स्ट, टेबल, बुनियादी ग्राफिकल प्रिमिटिव। इसका API iText 2.x जैसा दिखता है, लेकिन आधुनिक Kotlin कोड में यह कोई समस्या नहीं है।

पैराग्राफ और सूची के साथ PDF बनाने का उदाहरण:

import com.lowagie.text.Document
import com.lowagie.text.Paragraph
import com.lowagie.text.pdf.PdfWriter
import java.io.FileOutputStream

fun generateReportOpenPdf(outputPath: String) {
    val document = Document()
    PdfWriter.getInstance(document, FileOutputStream(outputPath))
    document.open()
    document.add(Paragraph("Kotlin में OpenPDF के साथ रिपोर्ट"))
    document.add(Paragraph("यह एक सरल उदाहरण है।"))
    document.close()
    println("OpenPDF रिपोर्ट तैयार: $outputPath")
}

अनुशंसाएँ