Go (Golang) में PDF रिपोर्ट जनरेशन: लाइब्रेरी और कोड उदाहरण
Go (Golang) एक आधुनिक कंपाइल्ड भाषा है जिसे हाई-लोड सर्वर एप्लिकेशन और माइक्रोसर्विसेज बनाने के लिए तेजी से चुना जा रहा है। ऐसे सिस्टम में एक सामान्य कार्य है PDF रिपोर्ट (इनवॉइस, एक्ट, स्टैटिस्टिकल डैशबोर्ड) तैयार करना। इस लेख में हम Go में PDF जनरेट करने के लिए तीन लोकप्रिय लाइब्रेरी, उनकी खूबियाँ और तैयार कोड उदाहरण देखेंगे।
1. gofpdf — स्क्रैच से PDF बनाने का क्लासिक तरीका
लाइब्रेरी gofpdf (अब jung-kurt/gofpdf या फोर्क go-pdf/fpdf के रूप में विकसित) प्रसिद्ध PHP लाइब्रेरी FPDF का पोर्ट है। यह बिना किसी बाहरी डिपेंडेंसी के, केवल Go के मानक टूल का उपयोग करके PDF डॉक्यूमेंट बनाने की सुविधा देती है।
इंस्टॉलेशन
go get github.com/jung-kurt/gofpdf
उदाहरण: सरल इनवॉइस
package main
import (
"github.com/jung-kurt/gofpdf"
)
func main() {
pdf := gofpdf.New("P", "mm", "A4", "")
pdf.SetFont("Arial", "B", 16)
pdf.AddPage()
pdf.CellFormat(190, 10, "इनवॉइस नं. 123, दिनांक 01.01.2025", "0", 1, "C", false, 0, "")
pdf.SetFont("Arial", "", 12)
pdf.Ln(10)
pdf.CellFormat(190, 10, "उत्पाद: लैपटॉप", "1", 1, "L", false, 0, "")
pdf.CellFormat(190, 10, "मूल्य: ₹1,20,000", "1", 1, "L", false, 0, "")
pdf.CellFormat(190, 10, "कुल: ₹1,20,000", "1", 1, "L", false, 0, "")
err := pdf.OutputFileAndClose("invoice.pdf")
if err != nil {
panic(err)
}
}
फायदे: न्यूनतम डिपेंडेंसी, हर एलिमेंट पर पूरा नियंत्रण, यूनिकोड सपोर्ट (AddUTF8Font के जरिए)।
नुकसान: लो-लेवल API — जटिल रिपोर्ट के लिए मैन्युअल कोडिंग ज्यादा करनी पड़ती है।
2. maroto — टेबल और स्टाइल के साथ हाई-लेवल जनरेशन
Maroto gofpdf के ऊपर बनी है, लेकिन अधिक सुविधाजनक API प्रदान करती है: टेबल, ग्रिड, ऑटोमैटिक अलाइनमेंट और बिल्ट-इन फॉन्ट सपोर्ट। सामान्य रिपोर्ट जैसे इनवॉइस, लिस्ट, प्राइस लिस्ट के लिए यह आदर्श है।
इंस्टॉलेशन
go get github.com/johnfercher/maroto/v2
उदाहरण: डेटा के साथ टेबल
package main
import (
"github.com/johnfercher/maroto/v2/pkg/core"
"github.com/johnfercher/maroto/v2/pkg/props"
"github.com/johnfercher/maroto/v2"
)
func main() {
m := maroto.New()
m.SetPageMargins(10, 10, 10)
// हेडर
m.Row(10, func() {
m.Col(12, func() {
m.Text("बिक्री रिपोर्ट", props.Text{
Style: props.Bold,
Size: 16,
Align: props.Center,
})
})
})
// टेबल
header := []string{"उत्पाद", "मात्रा", "मूल्य"}
data := [][]string{
{"मॉनिटर", "2", "₹30,000"},
{"कीबोर्ड", "5", "₹7,500"},
}
m.TableList(header, data, props.TableList{
HeaderProp: props.TableListContent{
Style: props.Bold,
Size: 10,
},
ContentProp: props.TableListContent{
Size: 9,
},
})
document, _ := m.Generate()
document.Save("report.pdf")
}
फायदे: तेज डेवलपमेंट, बिल्ट-इन स्टाइल, ऑटोमैटिक पेज ब्रेक।
नुकसान: गैर-मानक लेआउट के लिए कम लचीलापन।
3. wkhtmltopdf — Go रैपर के जरिए HTML को PDF में बदलना
अगर आपके पास पहले से HTML टेम्पलेट (जैसे Bootstrap पर) हैं, तो wkhtmltopdf का उपयोग करना सबसे आसान है। यह Go लाइब्रेरी नहीं, बल्कि कमांड-लाइन यूटिलिटी है, लेकिन Go के लिए go-wkhtmltopdf रैपर उपलब्ध है। यह HTML स्ट्रिंग लेता है और PDF लौटाता है।
इंस्टॉलेशन
# पहले wkhtmltopdf इंस्टॉल करें: https://wkhtmltopdf.org/downloads.html
go get github.com/SebastiaanKlippert/go-wkhtmltopdf
उदाहरण: HTML से PDF
package main
import (
"bytes"
"fmt" पुस्तकालय में भी
Rust में एप्लिकेशन कॉन्फ़िगरेशन: config और dotenv लाइब्रेरीज़
TypeScript अनुप्रयोगों का कॉन्फ़िगरेशन: लाइब्रेरीज़ और दृष्टिकोण
Swift (iOS/macOS) में S3 और क्लाउड स्टोरेज के साथ कार्य: AWSS3 और Amplify
iOS/macOS पर Swift अनुप्रयोगों की निगरानी: पुस्तकालय और उपकरण