Rust में PDF जनरेशन: लाइब्रेरी और टूल्स का अवलोकन
\n\nRust भाषा, जो अपनी प्रदर्शन क्षमता और सुरक्षा के लिए जानी जाती है, PDF दस्तावेज़ बनाने के लिए कई शक्तिशाली लाइब्रेरी प्रदान करती है। Python के विपरीत, जहाँ reportlab और fpdf का प्रभुत्व है, Rust का इकोसिस्टम हल्के लेकिन कार्यात्मक समाधान प्रदान करता है। इस लेख में हम तीन प्रमुख लाइब्रेरी: printpdf, genpdf और pdf-writer पर चर्चा करेंगे, साथ ही निम्न-स्तरीय दृष्टिकोणों को भी छूएंगे।
1. printpdf — बुनियादी लेकिन लचीली लाइब्रेरी
\n\nprintpdf Rust पर PDF जनरेशन के लिए सबसे लोकप्रिय लाइब्रेरी में से एक है। यह PDF संरचना तक निम्न-स्तरीय पहुँच प्रदान करता है, जिससे आप तत्वों की मनमानी स्थिति निर्धारण के साथ दस्तावेज़ बना सकते हैं। यह लाइब्रेरी फ़ॉन्ट एम्बेडिंग, इमेज के साथ काम करने और बुनियादी ग्राफिक प्रिमिटिव का समर्थन करती है।
उपयोग का उदाहरण:
\n\nuse printpdf::*;\nuse std::fs::File;\nuse std::io::BufWriter;\n\nfn main() {\n let (doc, page1, layer1) = PdfDocument::new("PDF दस्तावेज़", \n Mm(210.0), Mm(297.0), "Layer 1");\n\n let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();\n\n // टेक्स्ट जोड़ें\n doc.use_text("नमस्ते, दुनिया!", 24.0, \n Mm(20.0), Mm(280.0), &font);\n\n // एक रेखा खींचें\n let layer = doc.get_page(page1).get_layer(layer1);\n layer.set_color(Color::Rgb(Rgb::new(0.0, 0.0, 0.0), None));\n layer.add_line(Point::new(Mm(20.0), Mm(270.0)), \n Point::new(Mm(100.0), Mm(270.0)));\n\n // सेव करें\n let file = File::create("example.pdf").unwrap();\n doc.save(&mut BufWriter::new(file)).unwrap();\n}\n\nलाभ:
\n- \n
- PDF संरचना पर पूर्ण नियंत्रण \n
- TrueType फ़ॉन्ट एम्बेडिंग का समर्थन \n
- इमेज (PNG, JPEG) के साथ काम करना \n
- SVG ग्राफिक्स का समर्थन (
printpdf-svgके माध्यम से) \n
नुकसान:
\n- \n
- टेक्स्ट का स्वचालित लेआउट नहीं \n
- स्थिति निर्धारण को मैन्युअल रूप से प्रबंधित करने की आवश्यकता \n
- तालिकाओं और बहु-पृष्ठ लेआउट का समर्थन नहीं \n
2. genpdf — लेआउट के साथ सरल दस्तावेज़ों के लिए
\n\ngenpdf एक उच्च-स्तरीय लाइब्रेरी है जो लेआउट प्रक्रिया को स्वचालित करती है। यह रिपोर्ट, पत्र और सरल संरचना वाले अन्य दस्तावेज़ बनाने के लिए आदर्श है। यह लाइब्रेरी लाइन रैपिंग, टेक्स्ट संरेखण और बुनियादी डिज़ाइन तत्वों का समर्थन करती है।
सरल दस्तावेज़ बनाने का उदाहरण:
\n\nuse genpdf::{Document, SimplePageSettings};\nuse genpdf::elements::{Paragraph, Break, Image};\nuse genpdf::fonts::FontFamily;\n\nfn main() -> Result<(), Box> {\n let font_family = FontFamily::from_files(\n "fonts/", \n "LiberationSans", \n None\n )?;\n\n let mut doc = Document::new(font_family);\n doc.set_title("दस्तावेज़ का उदाहरण");\n\n // तत्व जोड़ें\n doc.push(Paragraph::new("शीर्षक").bold());\n doc.push(Break::new(5.0));\n doc.push(Paragraph::new("स्वचालित लाइन रैपिंग के साथ मुख्य टेक्स्ट। "\n .to_string() + "genpdf लाइब्रेरी स्वयं स्थितियों की गणना करती है।"));\n\n // सेव करें\n doc.render_to_file("output.pdf")?;\n Ok(())\n} \n\nलाभ:
\n- \n
- टेक्स्ट का स्वचालित लेआउट \n
- लाइन रैपिंग और संरेखण का समर्थन \n
- तत्व जोड़ने के लिए सरल API \n
- बहु-पृष्ठ दस्तावेज़ बनाने की क्षमता \n
नुकसान:
\n- \n
- ग्राफिक्स का सीमित समर्थन \n
- तालिकाओं का अंतर्निहित समर्थन नहीं \n
- स्थिति निर्धारण पर कम नियंत्रण \n
3. pdf-writer — निम्न-स्तरीय प्रदर्शन
\n\npdf-writer PDF ऑब्जेक्ट्स की सीधी रिकॉर्डिंग के लिए एक न्यूनतम लाइब्रेरी है। यह
पुस्तकालय में भी
Java में Kafka के साथ काम करें: लाइब्रेरी, सेटअप और कोड उदाहरण
Swift अनुप्रयोगों का कॉन्फ़िगरेशन: SwiftyConfiguration लाइब्रेरी
PHP में HTML पार्सिंग: वेब स्क्रैपिंग के लिए DOMDocument, SimpleXML और cURL
जावास्क्रिप्ट (Node.js) में रिएक्टिव प्रोग्रामिंग: RxJS और ऑब्ज़र्वेबल्स