1. 产品
  2.   Aspose.PDF
  3.   Aspose.PDF FOSS for C++

C++ 的 Aspose.PDF FOSS

开源 C++ 库,用于创建、编辑、渲染和保护 PDF 文档,且没有任何运行时依赖。

Aspose.PDF FOSS — 开源 C++ PDF 库

Aspose.PDF FOSS for C++ 是一个开源的、现代的 C++20 库,用于处理 PDF 文档——打开和保存 PDF、提取文本、将页面栅格化为图像格式,以及从头构建文档(文本、图像、表格、矢量图形、批注、AcroForm 字段和书签)。该库仅依赖 C++ 标准库:包括 TIFF、JPEG 和 PNG 编解码器以及页面栅格化器在内的每个原语均从头实现,且不依赖任何商业 PDF 堆栈。

核心 API 围绕 Document 类及其 Pages() 集合构建。文本可使用 Aspose::Pdf::Text::TextAbsorber 提取,页面通过 PngDevice、JpegDevice、BmpDevice 和 TiffDevice 等设备类渲染为栅格图像,文档可以使用 Document.Encrypt() 通过 CryptoAlgorithm 枚举选择 RC4-40、RC4-128、AES-128 或 AES-256 算法进行加密。交互式表单字段通过 Form 类管理,批注——文本注释、突出显示、形状和印章——则通过 Annotation 类层次结构添加和修改。

Aspose.PDF FOSS for C++ 在 MIT 许可证下发布,没有运行时费用或使用限制。它通过 CMake 构建为静态库——将其作为子目录添加到你的构建中或单独安装——并且只需要一个 C++20 编译器,无需其他运行时依赖。有关企业功能和支持,请参阅 Aspose.PDF for C++ — Enterprise Product。

文档加载和页面管理

  • 打开现有 PDF 文件并使用 Document 保存修改
  • 通过 Document.Pages()(PageCollection)访问并遍历页面
  • 使用 PageCollection.Add()/Insert()/Delete() 添加、插入和删除页面
  • 通过 DocumentInfo(Document.Info())读取和设置文档元数据
  • 使用 Document.Optimize()/OptimizeResources() 优化文档大小

典型用例

  • 为报告和发票构建 PDF 生成管道
  • 合并、拆分并重新组织现有 PDF 文档
  • 以编程方式检查和更新文档元数据
  • 在归档或分发之前压缩 PDF 文件大小

文本提取

  • 使用 Aspose::Pdf::Text::TextAbsorber 从整个文档提取纯文本
  • 通过 TextAbsorber.Visit() 访问单页或整个文档
  • 通过 TextAbsorber.Text() 获取提取的文本
  • 使用 TextFragmentAbsorber.TextFragments() 定位单个文本片段

典型用例

  • 为搜索索引 PDF 内容
  • 从发票和结构化文档中提取数据
  • 构建文本挖掘或内容分析管道
  • 在自动化测试套件中验证文档内容

渲染为光栅图像

  • 使用 PngDevice 将页面渲染为 PNG
  • 使用 JpegDevice、BmpDevice、TiffDevice 将页面渲染为 JPEG、BMP 或 TIFF
  • 使用 Resolution 类控制输出分辨率
  • 通过 {Device}.Process() 处理单个页面

典型用例

  • 为文档查看器生成页面缩略图
  • 从矢量 PDF 生成可打印的光栅输出
  • 构建 PDF 到图像的转换服务
  • 为生成的 PDF 创建视觉回归基线

加密和安全

  • 使用 Document.Encrypt() 并提供用户密码和所有者密码对文档进行加密
  • 通过 CryptoAlgorithm 枚举选择 RC4-40、RC4-128、AES-128 或 AES-256
  • 使用 Permissions 类型控制授予的权限
  • 使用 Document.Decrypt() 解密受密码保护的文档

典型用例

  • 在分发前保护机密 PDF 报告
  • 对共享文档实施打印/复制/编辑限制
  • 为生成的发票和对账单添加密码保护
  • 在文档流水线中批量加密文档

批注和交互式表单

  • 通过 Annotation 和 AnnotationCollection 添加、修改和扁平化注释
  • 通过 Form 类管理 AcroForm 字段
  • 使用 Form.Add()/Form.Delete() 添加和删除字段
  • 使用 Form.Flatten() 将交互式表单扁平化为静态内容

典型用例

  • 向共享的 PDF 添加审阅评论和高亮
  • 构建可填写的 PDF 表单用于数据收集
  • 在归档前将已提交的表单扁平化
  • 通过编程预填充并锁定表单字段

打开 PDF,提取文本并渲染页面

将库添加为 CMake 子目录,然后打开文档,统计其页数,使用 TextAbsorber 提取文本,并以 150 DPI 将第 1 页渲染为 PNG。

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_collection.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Pages: " << doc.Pages().Count() << "\n";

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

    Aspose::Pdf::Devices::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.png", std::ios::binary);
    png.Process(doc.Pages()[1], out);
}

使用 AES-256 加密文档

打开文档并使用 AES-256 加密通过用户密码和所有者密码进行保护。

#include <aspose/pdf/document.hpp>
int main() {
    Aspose::Pdf::Document doc("input.pdf");
    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions(),
                Aspose::Pdf::CryptoAlgorithm::AESx256);
    doc.Save("encrypted.pdf");
}

读取并更新文档元数据

读取现有的 /Info 条目,并通过 DocumentInfo 更新文档标题。

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/document_info.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto& info = doc.Info();
    std::cout << "Title: " << info.Title() << "\n";
    std::cout << "Author: " << info.Author() << "\n";

    doc.SetTitle("Updated Report Title");
    doc.Save("output.pdf");
}

常见问题

Aspose.PDF FOSS for C++ 的许可模式是什么?

它采用 MIT 许可证,可免费用于商业和非商业产品,且没有激活密钥或 API 调用限制。

需要哪些编译器和 CMake 版本?

需要 C++20 编译器(clang 16+、gcc 13+ 或 MSVC 2022 17.5+)和 CMake 3.22 或更高版本。Python 3 仅在构建时需要。

该库有任何运行时依赖吗?

不。它仅链接 C++ 标准库——运行时不需要任何第三方 PDF、图像或压缩依赖。

它可以读取和导出哪些格式?

它可以读取并保存原生 PDF 文档,并将渲染的页面导出为 Bmp、Jpeg 和 Tiff,以及纯文本。SVG 内容可以导入。

如何加密 PDF 文档?

使用用户密码、所有者密码和 CryptoAlgorithm(RC4x40、RC4x128、AESx128 或 AESx256)调用 Document.Encrypt()。

当前版本是否已知有任何限制?

是的——一些 XmpValue 类型检查助手(IsDateTime、IsField 等)是始终返回 false 的存根;请改用 IsString/IsInteger/IsDouble/IsArray。

  

支持和学习资源

 中文