توليد تقارير PDF بلغة Rust: نظرة عامة على المكتبات وأمثلة عملية
Rust هي لغة برمجة أنظمة حديثة تكتسب شعبية في تطوير الويب، بما في ذلك إنشاء تطبيقات الخادم وأدوات توليد المستندات. إذا كنت بحاجة إلى إنشاء تقارير PDF بلغة Rust، فقد وصلت إلى المكان الصحيح. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع PDF، وإمكانياتها، ونقدم أمثلة عملية على الكود.
لماذا توليد PDF بلغة Rust؟
PDF هو تنسيق عالمي لتبادل المستندات والتقارير والفواتير. توفر Rust:
- أداءً عالياً واستهلاكاً منخفضاً للذاكرة.
- أماناً في التعامل مع الذاكرة بدون جامع القمامة.
- تكاملاً سهلاً مع أطر الويب (Actix، Rocket، Axum).
- توافقاً عبر المنصات (Windows، Linux، macOS).
المكتبات الرئيسية لـ PDF بلغة Rust
1. printpdf — العمل منخفض المستوى مع PDF
printpdf هي المكتبة الأكثر شيوعاً لإنشاء مستندات PDF "من الصفر". تتيح لك رسم الخطوط والنصوص والصور والجداول، مع التحكم في كل بكسل. مناسبة للتقارير المعقدة ذات التخطيط المخصص.
التثبيت:
[dependencies]printpdf = "0.7"مثال: PDF بسيط مع نص
use printpdf::*;use std::fs::File;
fn main() { let (doc, page1, layer1) = PdfDocument::new( "تقريري الأول", Mm(210.0), Mm(297.0), "Layer 1", );
let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();
let current_layer = doc.get_page(page1).get_layer(layer1); current_layer.use_text("مرحباً بالعالم!", 24.0, Mm(20.0), Mm(280.0), &font);
doc.save(&mut File::create("output.pdf").unwrap()).unwrap();}2. genpdf — توليد التقارير عالي المستوى
genpdf مبني فوق printpdf ويوفر واجهة برمجة تطبيقات مريحة لإنشاء مستندات تحتوي على جداول وعناوين وفقرات وأنماط. مثالي للتقارير حيث تكون البنية مهمة، وليس التموضع اليدوي.
التثبيت:
[dependencies]genpdf = "0.3"مثال: تقرير مع جدول
use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Table, TableLayout};use genpdf::fonts::FontFamily;
fn main() { let font_family = FontFamily::from_files( "/usr/share/fonts/truetype/dejavu/", "DejaVuSans", None, ).unwrap();
let mut doc = Document::new(font_family); doc.set_title("تقرير المبيعات");
let mut table = Table::new(TableLayout::new(vec![2, 3, 3])); table.row() .element(Paragraph::new("المنتج")) .element(Paragraph::new("الكمية")) .element(Paragraph::new("السعر"));
table.row() .element(Paragraph::new("حاسوب محمول")) .element(Paragraph::new("10")) .element(Paragraph::new("1200$"));
doc.push(table); doc.render_to_file("report.pdf").unwrap();}3. wkhtmltopdf — HTML إلى PDF عبر WebKit
إذا كنت تفضل تصميم التقارير باستخدام HTML/CSS، استخدم الغلاف حول الأداة wkhtmltopdf. تقوم بتحويل قالب HTML إلى PDF، مع دعم الأنماط والصور وJavaScript.
التثبيت:
[dependencies]wkhtmltopdf = "0.4"مثال: تحويل HTML
use wkhtmltopdf::*;
fn main() { let html = r#" <h1>تقرير الشهر</h1> <p>المبيعات: <strong>150 000 ₽</strong></p> <table border="1"> <tr><td>يناير</td><td>50 000</td></tr> <tr><td>فبراير</td><td>100 000</td></tr>