< 返回版块

西沉 发表于 2020-04-03 01:53

Tags:pdf

本期的每周一库带来的是一个rust下的pdf生成库,printpdf

根据printpdf文档的描述可以得知,printpdf是一个用来生成用于打印的pdf文件的rust库

使用方法非常简单只需要在Cargo.toml文件的[dependencies]标签下添加引用即可,这里使用的是printpdf 0.3.2版本

[dependencies]
printpdf = "0.3.2"

printpdf特性
现阶段的printpdf只支持生成pdf文件,还不支持读取pdf文件

  • 页面生成
  • 页面分层
  • 图像绘制(线条,形状,贝塞尔曲线)
  • 图像(现阶段支持BMP容器格式的图像)
  • 嵌入字体(可以使用TTF或者OTF格式的字体)
  • 高级图像绘制模式
  • 高级字符渲染(例如字符尺度缩放,字体间距,边距等)
  • PDF分层(用于在Adobe Illustrator中打开编辑分层)

下面我们通过文档中给出的例子来体验一下printpdf库的功能

测试环境

  • Windows 10
  • cargo --version 1.39.0
  • rustc --version 1.39.0

创建一个简单pdf页面

这里我们使用了cargo new your_project_name来创建工程,在src\main.rs文件中写入如下代码

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

fn main() {
    let (doc, page1, layer1) = PdfDocument::new("PDF_Document_title", Mm(247.0), Mm(210.0), "Layer 1");
    let (page2, layer1) = doc.add_page(Mm(10.0), Mm(250.0),"Page 2, Layer 1");
    
    doc.save(&mut BufWriter::new(File::create("demo.pdf").unwrap())).unwrap();
}

使用命令cargo build编译工程,会在目录target\debug中编译生成可执行的exe文件。运行生成的可执行文件会生成一个名为demo.pdf

打开生成的pdf文件,里面包含了两个页面,第一页宽度247,高度210;第二页宽度10,高度250,分别有不同的页面宽度和高度,内容如下:

教程中还有关于图形绘制,字体等的示例代码。这里就不一一赘述了。

最后记录一个测试printpdf的小插曲
也许是由于网络原因,在rust工程中添加dependences后总显示无法连接github.com。但是terminal中却可以正常使用git clone命令。

如果有遇到同样情况的,可以在$USER/.cargo/目录下创建一个配置文件,文件名config,不需要扩展名,在文件内写入

[net]  
git-fetch-with-cli = true

保存之后就解决了cargo无法连接github.com的错误

以上就是本期每周一库的内容。

评论区

写评论
tokyohuang123 2020-04-07 13:29

这个功能没啥用啊 

jellybobbin 2020-04-03 09:06

可以生成复杂的页面不,表现力相比html 怎么样

1 共 2 条评论, 1 页