توليد PDF في Rust: نظرة عامة على المكتبات والأدوات لإنشاء مستندات PDF

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

توليد PDF في Rust: نظرة عامة على المكتبات والأدوات



لغة Rust، المعروفة بأدائها وأمانها، تقدم العديد من المكتبات القوية لإنشاء مستندات PDF. على عكس Python حيث تهيمن reportlab و fpdf، توفر بيئة Rust حلولاً خفيفة الوزن ولكنها وظيفية. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: printpdf و genpdf و pdf-writer، بالإضافة إلى مناقشة الأساليب منخفضة المستوى.



1. printpdf — مكتبة أساسية ولكنها مرنة



printpdf هي واحدة من أشهر المكتبات لتوليد PDF في Rust. توفر وصولاً منخفض المستوى إلى بنية PDF، مما يسمح بإنشاء مستندات مع تحديد موضع العناصر بشكل عشوائي. تدعم المكتبة تضمين الخطوط، العمل مع الصور، والأساسيات الرسومية.



مثال على الاستخدام:



use printpdf::*;use std::fs::File;use std::io::BufWriter;

fn main() { let (doc, page1, layer1) = PdfDocument::new("مستند PDF", Mm(210.0), Mm(297.0), "الطبقة 1");

let font = doc.add_builtin_font(BuiltinFont::Helvetica).unwrap();

// إضافة نص doc.use_text("مرحباً بالعالم!", 24.0, Mm(20.0), Mm(280.0), &font);

// رسم خط let layer = doc.get_page(page1).get_layer(layer1); layer.set_color(Color::Rgb(Rgb::new(0.0, 0.0, 0.0), None)); layer.add_line(Point::new(Mm(20.0), Mm(270.0)), Point::new(Mm(100.0), Mm(270.0)));

// حفظ let file = File::create("example.pdf").unwrap(); doc.save(&mut BufWriter::new(file)).unwrap();}


المزايا:

  • تحكم كامل في بنية PDF
  • دعم تضمين خطوط TrueType
  • العمل مع الصور (PNG، JPEG)
  • دعم رسومات SVG (عبر printpdf-svg)


العيوب:

  • لا يوجد تنسيق تلقائي للنص
  • الحاجة إلى إدارة تحديد المواقع يدوياً
  • عدم دعم الجداول والتخطيطات متعددة الصفحات


2. genpdf — للمستندات البسيطة مع التنسيق



genpdf هي مكتبة ذات مستوى أعلى تعمل على أتمتة عملية التنسيق. إنها مثالية لإنشاء التقارير والرسائل والمستندات الأخرى ذات البنية البسيطة. تدعم المكتبة التفاف النص، محاذاة النص، وعناصر التصميم الأساسية.



مثال على إنشاء مستند بسيط:



use genpdf::{Document, SimplePageSettings};use genpdf::elements::{Paragraph, Break, Image};use genpdf::fonts::FontFamily;

fn main() -> Result<(), Box> { let font_family = FontFamily::from_files( "fonts/", "LiberationSans", None )?;

let mut doc = Document::new(font_family); doc.set_title("مثال على مستند");

// إضافة عناصر doc.push(Paragraph::new("عنوان").bold()); doc.push(Break::new(5.0)); doc.push(Paragraph::new("نص رئيسي مع التفاف تلقائي للأسطر. " .to_string() + "مكتبة genpdf تحسب المواضع بنفسها."));

// حفظ doc.render_to_file("output.pdf")?; Ok(())}


المزايا:

  • تنسيق تلقائي للنص
  • دعم التفاف النص والمحاذاة
  • واجهة برمجة تطبيقات بسيطة لإضافة العناصر
  • إمكانية إنشاء مستندات متعددة الصفحات


العيوب:

  • دعم محدود للرسومات
  • لا يوجد دعم مدمج للجداول
  • تحكم أقل في تحديد المواقع


3. pdf-writer — أداء منخفض المستوى



pdf-writer هي مكتبة بسيطة للكتابة المباشرة لكائنات PDF. إنها توفر

توصيات