Rust如何生成PDF文件
我想在Rust项目中生成PDF文件,但不太清楚应该使用哪些库或工具。有没有推荐的Rust库可以方便地创建PDF文档?最好能支持添加文本、图片和表格等基本元素。另外,生成的PDF需要支持中文显示,性能方面也希望不要太差。请问有什么成熟的解决方案吗?
        
          2 回复
        
      
      
        Rust中可用printpdf库生成PDF。先添加依赖到Cargo.toml,然后创建PDF文档对象,添加页面和图层,设置字体、绘制图形或文本,最后保存文件即可。代码简单,适合基础PDF生成需求。
在Rust中生成PDF文件可以使用以下库:
主要库推荐
1. printpdf
最常用的PDF生成库,功能全面:
use printpdf::*;
use std::fs::File;
use std::io::BufWriter;
fn create_pdf() -> Result<(), Box<dyn std::error::Error>> {
    let (doc, page1, layer1) = PdfDocument::new("PDF_Document_title", Mm(210.0), Mm(297.0), "Layer 1");
    let current_layer = doc.get_page(page1).get_layer(layer1);
    
    // 添加文本
    let font = doc.add_builtin_font(BuiltinFont::TimesRoman)?;
    current_layer.use_text("Hello PDF!", 48.0, Mm(20.0), Mm(270.0), &font);
    
    // 保存文件
    doc.save(&mut BufWriter::new(File::create("test.pdf")?))?;
    Ok(())
}
2. lopdf
轻量级PDF处理库:
use lopdf::{Document, Object, ObjectId};
use std::collections::BTreeMap;
fn create_simple_pdf() -> Result<(), Box<dyn std::error::Error>> {
    let mut doc = Document::with_version("1.5");
    
    // 创建页面
    let pages_id = doc.new_object_id();
    let font_id = doc.add_object(dictionary! {
        "Type" => "Font",
        "Subtype" => "Type1",
        "BaseFont" => "Helvetica",
    });
    
    let content = "Hello World".as_bytes().to_vec();
    let content_id = doc.add_object(content);
    
    let page_id = doc.add_object(dictionary! {
        "Type" => "Page",
        "Parent" => pages_id,
        "Contents" => content_id,
    });
    
    doc.save("simple.pdf")?;
    Ok(())
}
3. pdf-canvas
基于Canvas API风格:
use pdf_canvas::{Pdf, GraphicState, BuiltinFont};
use pdf_canvas::graphicsstate::Color;
fn draw_pdf() -> Result<(), Box<std::io::Error>> {
    let mut document = Pdf::create("canvas.pdf")?;
    document.render_page(400.0, 400.0, |c| {
        c.translate(200.0, 200.0);
        c.set_font(BuiltinFont::TimesRoman, 24.0);
        c.show_text("Hello Canvas!")?;
        Ok(())
    })?;
    document.finish()?;
    Ok(())
}
选择建议
- printpdf: 功能最全面,适合复杂文档
 - lopdf: 轻量级,适合简单PDF操作
 - pdf-canvas: 类似HTML Canvas API,易于上手
 
在Cargo.toml中添加依赖:
[dependencies]
printpdf = "0.4.0"
# 或
lopdf = "0.29.0"
# 或
pdf-canvas = "0.5.0"
推荐从printpdf开始,它文档完善且功能齐全。
        
      
                    
                  
                    
