常见问题
Aspose.PDF FOSS for C++ 的授权模式是什么?
Aspose.PDF FOSS for C++ 采用 MIT 许可证。它可免费用于商业和非商业产品,无需激活密钥、API 调用限制或商业协议。
如何将 Aspose.PDF FOSS for C++ 添加到 CMake 项目中?
将仓库 vendor 或 clone 到你的项目树中,作为子目录添加,并链接静态库目标:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)需要哪些编译器和 CMake 版本?
需要 C++20 编译器 — clang 16+、gcc 13+ 或 MSVC 2022 17.5+ — 以及 CMake 3.22 或更高版本。构建时仅需要 Python 3,以生成捆绑的 Standard-14 字体轮廓。
该库有任何运行时依赖吗?
No. Aspose.PDF C++ 的 FOSS 只链接 C++ 标准库——运行时不需要任何第三方 PDF、图像或压缩依赖。
哪些格式是 Aspose.PDF C++ 的 FOSS 能读取和导出的?
它可以打开和保存原生 PDF 文档。渲染后的页面可以通过 BmpDevice、JpegDevice、TiffDevice 导出为 Bmp、Jpeg 和 Tiff,并可通过 TextDevice 导出为纯文本。SVG 内容可以通过 SvgLoadOptions 导入到文档中。
如何打开已有的 PDF 并检查其页数?
#include <aspose/pdf/document.hpp>
Aspose::Pdf::Document doc("input.pdf");
std::size_t pages = doc.Pages().Count();如何从 PDF 文档中提取文本?
使用 TextAbsorber,访问文档,然后读取收集的文本:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::string text = absorber.Text();如何将 PDF 页面渲染为图像?
使用诸如 PngDevice 的设备类并指定目标 Resolution,随后将单页处理为输出流:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Devices::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.png", std::ios::binary);
png.Process(doc.Pages()[1], out);我该如何加密 PDF 文档?
调用 Document.Encrypt(),提供用户密码、所有者密码、Permissions 值和 CryptoAlgorithm:
#include <aspose/pdf/document.hpp>
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions(), Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");RC4x40、RC4x128、AESx128 和 AESx256 都可通过 CryptoAlgorithm 枚举获取。Document.Decrypt() 可从已打开的文档中移除加密。
我该如何读取或填写 AcroForm 字段值?
遍历文档中的 Form.Fields(),并按其部分名称读取或设置每个字段的值:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/forms/form.hpp>
Aspose::Pdf::Document doc("application_form.pdf");
auto& form = doc.Form();
for (auto* field : form.Fields()) {
if (field->PartialName() == "applicant_name") {
field->Value("Jane Doe");
}
}
doc.Save("application_filled.pdf");当前版本是否存在已知的限制?
是的。XmpValue —— 从 Document.Metadata() 返回的 XMP 元数据条目使用的值类型 —— 暴露了类型检查助手 IsDateTime()、IsField()、IsNamedValue()、IsRaw()、IsNamedValues() 和 IsStructure(),这些目前都是存根并始终返回 false。基于这些检查的代码分支无法区分这些 XMP 值的种类。请改用已实现的检查 —— IsString()、IsInteger()、IsDouble()、IsArray() ——,或者在已从上下文中知道值的种类时直接调用相应的访问器(ToStringValue()、ToInteger()、ToDouble()、ToArray())。少量低层内部类型也包含未被典型文档处理代码使用的存根构造函数。
源码和问题跟踪系统在哪里?
源代码和问题跟踪器可在 https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp 获取。