Node.js में PDF रिपोर्ट जनरेशन: पूरी गाइड
PDF दस्तावेज़ बनाना वेब डेवलपमेंट की सबसे ज़रूरी ज़रूरतों में से एक है। चाहे इनवॉइस डाउनलोड करना हो, एनालिटिकल रिपोर्ट तैयार करनी हो या सर्टिफिकेट जनरेट करना हो - एक भरोसेमंद टूल के बिना काम नहीं चलता। Node.js इकोसिस्टम में कई शक्तिशाली लाइब्रेरी हैं जो इस काम को तेज़ और लचीला बनाती हैं। इस आर्टिकल में हम तीन मुख्य तरीकों पर चर्चा करेंगे और बताएँगे कि PythonLib पर अपने प्रोजेक्ट के लिए सही टूल कैसे चुनें।
सर्वर पर PDF क्यों जनरेट करें?
क्लाइंट-साइड (ब्राउज़र) जनरेशन में अक्सर सीमाएँ होती हैं: पेज रिफ्रेश होने पर डेटा खो सकता है, और मोबाइल डिवाइस जटिल लेआउट को सही से हैंडल नहीं कर पाते। Node.js पर सर्वर-साइड अप्रोच आपको डॉक्यूमेंट स्ट्रक्चर पर पूरा कंट्रोल देता है, बिज़नेस लॉजिक को सुरक्षित रखता है, और CI/CD पाइपलाइन में जनरेशन को इंटीग्रेट करने की सुविधा देता है।
Node.js में PDF के लिए टॉप-3 लाइब्रेरी
1. PDFKit — लो-लेवल कंटेंट कंट्रोल
PDFKit स्क्रैच से PDF बनाने की सबसे लोकप्रिय लाइब्रेरी है। इसमें Chromium जैसी कोई अतिरिक्त डिपेंडेंसी नहीं लगती और आप डॉक्यूमेंट के हर पिक्सल को कंट्रोल कर सकते हैं।
- फायदे: हल्की (कुछ MB ही), लेआउट की पूरी आज़ादी, फॉन्ट, इमेज और वेक्टर ग्राफिक्स का सपोर्ट।
- नुकसान: जटिल लेआउट के लिए बहुत कोड लिखना पड़ता है, ऑटोमैटिक टेक्स्ट रैपिंग नहीं है।
सिंपल इनवॉइस बनाने का उदाहरण:
const PDFDocument = require('pdfkit');
const fs = require('fs');
const doc = new PDFDocument({ margin: 50 });
doc.pipe(fs.createWriteStream('invoice.pdf'));
// हेडर
doc.fontSize(25).text('इनवॉइस #123', { align: 'center' });
doc.moveDown();
// टेबल
doc.fontSize(12).text('आइटम: कंसल्टेशन', { continued: true })
.text('कीमत: ₹5000', { align: 'right' });
doc.moveDown();
doc.text('कुल: ₹5000', { align: 'right' });
doc.end();
2. Puppeteer — HTML/CSS से जनरेशन
Puppeteer एक headless Chromium ब्राउज़र चलाता है और HTML पेज को PDF में बदल देता है। यह सबसे अच्छा विकल्प है अगर आपके पास पहले से CSS स्टाइल वाले HTML टेम्पलेट हैं।
- फायदे: HTML के ज़रिए आसान लेआउट, सभी CSS प्रॉपर्टीज (flex, grid, @media print) का सपोर्ट, हेडर-फुटर जोड़ने की सुविधा।
- नुकसान: भारी डिपेंडेंसी (~300 MB Chromium), धीमा स्टार्टअप, सिंपल डॉक्यूमेंट के लिए उपयुक्त नहीं।
HTML को PDF में बदलने का उदाहरण:
const puppeteer = require('puppeteer');
async function generateReport() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(`<h1 style="color: blue;">मार्च 2025 रिपोर्ट</h1>
<p>कुल राजस्व: <strong>₹12,00,000</strong></p>`);
await page.pdf({
path: 'report.pdf',
format: 'A4',
printBackground: true,
margin: { top: '20px', bottom: '20px' }
});
await browser.close();
}
generateReport();
3. jsPDF — यूनिवर्सल टूल (क्लाइंट + सर्वर)
jsPDF एक ऐसी लाइब्रेरी है जो ब्राउज़र और Node.js दोनों में काम करती है। यह टेबल, ग्राफ और फॉन्ट एम्बेड करने के लिए हाई-लेवल मेथड प्रदान करती है।
- फायदे: सरल API, प्लगइन के ज़रिए टेबल सपोर्ट, हल्का वज़न।
- नुकसान: सर्वर पर फॉन्ट मैन्युअली सेट करने पड़ते हैं (डिफ़ॉल्ट में सभी देवनागरी कैरेक्टर नहीं होते)।
टेबल के साथ उदाहरण:
const { jsPDF } = require("jspdf");
require("jspdf-autotable");
const doc = new jsPDF();
doc.text("बिक्री आँकड़े", 14, 20);
doc.autoTable({
head: [['महीना', 'बिक्री', 'लाभ']],
body: [
['जनवरी', '100', '₹20,000'],
['फरवरी', '150', '₹30,000'],
['मार्च', '200', '₹40,000']
],
startY: 30
}); पुस्तकालय में भी
C# (.NET) में तिथियों के साथ कार्य: पुस्तकालयों और अंतर्निहित साधनों का अवलोकन
C# (.NET) में डेटा सत्यापन: लाइब्रेरीज़, विशेषताएँ और FluentValidation
जावास्क्रिप्ट (Node.js) में रिएक्टिव प्रोग्रामिंग: RxJS और ऑब्ज़र्वेबल्स
Rust में छवियों के साथ कार्य: image लाइब्रेरी और अन्य
C++ में PDF जनरेशन: लाइब्रेरीज़, टूल्स और कोड उदाहरण