Java में iText और Apache PDFBox से PDF रिपोर्ट जनरेशन

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

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

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

Java में PDF रिपोर्ट जनरेशन: iText और Apache PDFBox लाइब्रेरी का परिचय

Java एप्लिकेशन में PDF दस्तावेज़ बनाना एक आम ज़रूरत है। रिपोर्ट, इनवॉइस, चालान, सर्टिफिकेट — इन सबको प्रोग्रामेटिक रूप से तैयार करना सुविधाजनक होता है। Java इकोसिस्टम में PDF के साथ काम करने के लिए दो मुख्य लाइब्रेरी हैं: iText (उद्योग मानक, लेकिन नए वर्जन के लिए कमर्शियल लाइसेंस) और Apache PDFBox (पूरी तरह से मुफ्त और ओपन-सोर्स)। इस लेख में हम दोनों को समझेंगे, कोड उदाहरण देखेंगे और आपके प्रोजेक्ट के लिए सही टूल चुनने में मदद करेंगे।

1. Apache PDFBox — मुफ्त और शक्तिशाली विकल्प

Apache PDFBox एक ओपन-सोर्स लाइब्रेरी है (Apache 2.0 लाइसेंस)। यह आपको नए PDF बनाने, मौजूदा PDF को एडिट करने, टेक्स्ट और मेटाडेटा निकालने की सुविधा देती है। PDFBox के लिए किसी कमर्शियल लाइसेंस की ज़रूरत नहीं है, जो इसे स्टार्टअप और ओपन-सोर्स प्रोजेक्ट्स के लिए आदर्श बनाता है।

मुख्य विशेषताएं:

  • टेक्स्ट, इमेज और टेबल के साथ दस्तावेज़ बनाना।
  • फॉन्ट सपोर्ट (हिंदी और अन्य भाषाओं के लिए)।
  • बुकमार्क, हाइपरलिंक और वॉटरमार्क जोड़ना।
  • एन्क्रिप्शन और पासवर्ड प्रोटेक्शन।
  • मौजूदा PDF से टेक्स्ट और इमेज निकालना।

उदाहरण: टेबल के साथ सरल PDF रिपोर्ट बनाना

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.common.PDRectangle;
import java.io.File;
import java.io.IOException;

public class PdfBoxReport {
    public static void main(String[] args) throws IOException {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);

            // हिंदी फॉन्ट लोड करें
            PDType0Font font = PDType0Font.load(document, new File("fonts/noto.ttf"));

            try (PDPageContentStream cs = new PDPageContentStream(document, page)) {
                // शीर्षक
                cs.beginText();
                cs.setFont(font, 18);
                cs.newLineAtOffset(50, 750);
                cs.showText("Q1 2025 बिक्री रिपोर्ट");
                cs.endText();

                // टेबल (लाइन और टेक्स्ट के माध्यम से सरल कार्यान्वयन)
                cs.setFont(font, 12);
                float margin = 50;
                float yStart = 700;
                float tableWidth = 500;
                float rowHeight = 25;
                String[] headers = {"उत्पाद", "मात्रा", "मूल्य (₹)"};
                String[][] data = {{"लैपटॉप", "10", "85000"}, {"माउस", "50", "1500"}, {"कीबोर्ड", "30", "3500"}};

                // टेबल हेडर
                cs.setLineWidth(1f);
                for (int i = 0; i < headers.length; i++) {
                    cs.addRect(margin + i * (tableWidth / 3), yStart - rowHeight, tableWidth / 3, rowHeight);
                    cs.stroke();
                    cs.beginText();
                    cs.newLineAtOffset(margin + i * (tableWidth / 3) + 5, yStart - rowHeight + 5);
                    cs.showText(headers[i]);
                    cs.endText();
                }

                // डेटा
                float yPos = yStart - rowHeight;
                for (String[] row : data) {
                    yPos -= rowHeight;
                    for (int i = 0; i < row.length; i++) {
                        cs.addRect(margin + i * (tableWidth / 3), yPos, tableWidth / 3, rowHeight);
                        cs.stroke();
                        cs.beginText();
                        cs.newLineAtOffset(margin + i * (tableWidth / 3) + 5, yPos + 5);
                        cs.showText(row[i]);
                        cs.endText();
                    }
                }
            }
            document.save("report.pdf");
        }
    }
}

अनुशंसाएँ