Go (Golang) पर PDF रिपोर्ट जनरेशन: पूर्ण मार्गदर्शिका
PDF दस्तावेज़ बनाना वेब डेवलपमेंट में एक सामान्य कार्य है, विशेष रूप से कॉर्पोरेट सिस्टम, वित्तीय एप्लिकेशन या शैक्षिक प्लेटफॉर्म बनाते समय। Go (Golang) भाषा PDF जनरेशन के लिए कई शक्तिशाली लाइब्रेरीज़ प्रदान करती है, जो सरल टेक्स्ट रिपोर्ट से लेकर तालिकाओं, ग्राफ़ और छवियों वाले जटिल बहु-पृष्ठ दस्तावेज़ बनाने की अनुमति देती हैं। इस लेख में, हम तीन लोकप्रिय दृष्टिकोणों पर विचार करेंगे: gofpdf, maroto और wkhtmltopdf के साथ एकीकरण।
1. gofpdf लाइब्रेरी — PDF का निम्न-स्तरीय नियंत्रण
gofpdf 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.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "बिक्री रिपोर्ट") pdf.Ln(12)
// तालिका शीर्षक pdf.SetFont("Arial", "B", 12) headers := []string{"उत्पाद", "मात्रा", "मूल्य"} for _, h := range headers { pdf.CellFormat(40, 10, h, "1", 0, "C", false, 0, "") } pdf.Ln(-1)
// डेटा pdf.SetFont("Arial", "", 12) data := [][]string{{"लैपटॉप", "5", "45000"}, {"माउस", "12", "1500"}} for _, row := range data { for _, cell := range row { pdf.CellFormat(40, 10, cell, "1", 0, "C", false, 0, "") } pdf.Ln(-1) }
err := pdf.OutputFileAndClose("report.pdf") if err != nil { panic(err) }}लाभ: न्यूनतम निर्भरताएँ, पूर्ण नियंत्रण, यूनिकोड समर्थन (TrueType फ़ॉन्ट)।
नुकसान: तैयार घटकों (तालिकाएँ, ग्राफ़) का अभाव, स्थितियों की मैन्युअल गणना करनी होती है।
2. maroto लाइब्रेरी — ग्रिड के साथ उच्च-स्तरीय जनरेशन
maroto gofpdf के ऊपर बनाई गई है और ग्रिड के साथ एक घटक-आधारित दृष्टिकोण प्रदान करती है, जो जटिल लेआउट बनाने को सरल बनाती है। यह मानक रिपोर्ट: चालान, डिलीवरी नोट, मूल्य सूची के लिए आदर्श है।
स्थापना
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.NewMaroto(maroto.WithMaxGridSize(12)) m.RegisterHeader(func() { m.Row(20, func() { m.Col(3, func() { m.FileImage("logo.png", props.Rect{ Percent: 80, Center: true, }) }) m.Col(9, func() { m.Text("टेक्नोसर्विस एलएलसी", props.Text{ Style: props.Bold, Size: 16, }) }) }) })
m.Row(10, func() { m.Col(12, func() { m.Table([]string{"नाम", "मात्रा", "राशि"}, [][]string{ {"24\\" मॉनिटर", "2", "40000"}, {"कीबोर्ड", "5", "7500"}, }, props.Table{ Content: props.TableContent{ GridSizes: []uint{6, 3, 3}, }, }) }) })
document, _ := m.Generate() _ = document.Save("invoice.pdf")}लाभ: तेज़ विकास, स्वचालित संरेखण, तालिकाओं, QR कोड और बारकोड के लिए अंतर्निहित समर्थन।
नुकसान: अधिक
पुस्तकालय में भी
Rust के लिए Elasticsearch क्लाइंट: आधिकारिक लाइब्रेरी elasticsearch-rs
C++ में क्रिप्टोग्राफी: OpenSSL और Crypto++ के साथ एन्क्रिप्शन और हैश
Clikt: Kotlin के लिए शक्तिशाली CLI फ्रेमवर्क जिसमें घोषणात्मक सिंटैक्स है