10 个版本
0.3.0 | 2024 年 4 月 26 日 |
---|---|
0.2.1 | 2024 年 3 月 20 日 |
0.1.7 | 2023 年 11 月 23 日 |
0.1.6 | 2023 年 7 月 24 日 |
0.1.1 | 2022 年 7 月 26 日 |
在 文本处理 分类中排名第 1538
每月下载量 462 次
在 2 个 crate 中使用(通过 qpdf)
6.5MB
139K SLoC
包含 (混淆的 autotools 代码,475KB) jpeg-9d/configure,(模糊的 autoconf 代码,12KB) jpeg-9d/configure.ac,(模糊的 autoconf 代码,1KB) zlib-1.2.11/contrib/minizip/configure.ac
qpdf-rs
概述
本项目包含 Rust 安全绑定到一个流行的 QPDF C++ 库。它使用通过 qpdf-c.h
头文件暴露的 QPDF C API。
测试目标
- x86_64-unknown-linux-gnu
- aarch64-unknown-linux-gnu
- x86_64-pc-windows-gnu
- x86_64-pc-windows-msvc
- x86_64-apple-darwin
- aarch64-apple-darwin
这些目标的预构建绑定包含在源代码树中。
默认情况下,将使用 pkg-config
来链接到系统库 libqpdf
。
如果启用了 vendored
功能,将构建并静态链接 qpdf 的 vendored 源代码树。
启用 legacy
功能将启用对 r2/3/4 加密选项的绑定,这些选项在 qpdf 10.x 中可用,但在 11.x 中不可用。
使用示例
use qpdf::*;
fn make_pdf_from_scratch() -> qpdf::Result<Vec<u8>> {
let qpdf = QPdf::empty();
let font = qpdf
.parse_object(
r#"<<
/Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
>>"#,
)?;
let procset = qpdf.parse_object("[/PDF /Text]")?;
let contents = qpdf.new_stream(b"BT /F1 15 Tf 72 720 Td (First Page) Tj ET\n");
let mediabox = qpdf.parse_object("[0 0 612 792]")?;
let rfont = qpdf.new_dictionary_from([("/F1", font.into_indirect())]);
let resources = qpdf.new_dictionary_from([
("/ProcSet", procset.into_indirect()),
("/Font", rfont.into())
]);
let page = qpdf.new_dictionary_from([
("/Type", qpdf.new_name("/Page")),
("/MediaBox", mediabox),
("/Contents", contents.into()),
("/Resources", resources.into()),
]);
qpdf.add_page(&page.into_indirect(), true)?;
let mem = qpdf
.writer()
.static_id(true)
.force_pdf_version("1.7")
.normalize_content(true)
.preserve_unreferenced_objects(false)
.object_stream_mode(ObjectStreamMode::Preserve)
.compress_streams(false)
.stream_data_mode(StreamDataMode::Preserve)
.write_to_memory()?;
Ok(mem)
}
额外的构建要求
- C/C++ 编译器
- 对于没有预构建 bindgen 绑定的目标
- 安装了 clang/llvm(带有
libclang
共享库)以在 bindgen 构建时调用 - 对于交叉编译,必须通过
BINDGEN_EXTRA_CLANG_ARGS
环境变量将自定义 sysroot 传递给 clang,例如:BINDGEN_EXTRA_CLANG_ARGS="--sysroot=/usr/x86_64-w64-mingw32/sys-root"
- 安装了 clang/llvm(带有
许可
根据 Apache 2.0 许可证授权。