原生 Linux 与 macOS
原生 FPC 后端在 Linux x64 与 macOS ARM64 上支持无头库工作流,产出真实的 ELF 与 Mach-O 程序
PDF 创建、保存/加载、文本提取与编辑、结构化提取、便携 OCR 回调、位图渲染、元数据、加密、网络 range 访问以及原生 PFX 签名,都使用既有 TPDFlib API
运行时依赖
| 提供程序 | 库 | 用途 |
|---|---|---|
| OpenSSL 3 | libcrypto | AES CBC/GCM、摘要、PKCS12 身份、CMS 签名、完整性以及显式信任锚链 |
| libcurl | libcurl 与异步 DNS | HTTP/HTTPS、有界二进制传输、range 访问与 RFC 3161 请求 |
| Cairo | libcairo | 位图图像表面、路径、剪裁、字形轮廓与图像 |
| Fontconfig | libfontconfig | 真实的本地字体文件匹配,包括显式的字族替换 |
| OpenJPEG 2 | libopenjp2 | JPEG 2000 解码与编码 |
Linux 加载对应的系统 SONAME;macOS 使用 /opt/homebrew 下的 ARM64 库与系统 libcurl
缺失库、缺失符号或不受支持的操作会产生显式失败;不使用任何 Windows 设备上下文替代物
签名与时间戳
默认 PFX 提供程序支持真实的 RSA 与 EC 身份、分离式 CMS、CAdES 以及传统的附加式 SHA1 配置;验证会检查 PDF ByteRange 字节与 CMS 签名
证书链验证需要显式的信任锚;内嵌证书不授予信任,仅完整性也不意味着信任
ApplyPAdESSignatureTimeStamp 使用配置的默认原生 HTTP 传输获取并附加真实的 RFC 3161 令牌;请在原始签名之前预留足够的 /Contents 容量
时间戳验证会检查签名的令牌、消息 imprint、独占的关键 timeStamping EKU、TSA 名称、可选的期望 policy/nonce,以及令牌生成时刻的可信证书链
文档时间戳还会验证实际的 PDF ByteRange imprint;调用方可以使用既有的 DocTimeStamp 直通工作流并提供令牌
元数据与渲染
XMP 使用真正的命名空间感知 DOM,并在编辑期间保留无关属性
无论源编码如何,XML 读取器都拒绝 DTD 声明;输入与解码后的字符都有界,DOM 构建之前的流式处理会限制深度与节点事件数量
渲染使用真实的原生位图存储与 Cairo 图像表面;条带渲染保留设备空间坐标,并使用保护行保持边界抗锯齿一致
原生字族字体嵌入会解析真实的 Fontconfig 文件,嵌入一个完整的独立 TrueType 程序,带 CIDFontType2、Identity CIDToGIDMap、初始化的度量与 Unicode 宽度;BMP 文本与便携 OCR 层在 PDF 保存/重新加载后仍然有效
该入口拒绝未嵌入的字族字体、字体集合、CFF 程序与仅位图嵌入权限;受限制的嵌入需要既有的显式权限覆盖,禁止子集化的字体保持为完整程序
限制
- Windows 设备上下文、EMF、GUI、剪贴板与打印不在原生无头后端范围内
- 复杂的原生文本整形与 Windows 系统证书存储身份不可用
- 独立 TrueType 嵌入入口目前支持 BMP 文本;增补平面文本、TTC 字面提取与 CFF 嵌入不在此入口范围内
- 在线 OCSP/CRL 吊销检查不可用;吊销验证请求会报告结果未知
- 默认原生 PFX 提供程序拒绝 RSA-PSS 以及额外的 policy、承诺或吊销签名属性
- 原生 CMYK/ICC 转换与索引型 1 位 BMP 写入不可用
- HTTP 需要 libcurl 支持异步 DNS 才能遵守 DNS 查找超时
构建与验证
python3 Tests/Native/run_native_tests.py --compiler /path/to/fpc --output /tmp/pdflib-native-tests
传入 --config /path/to/fpc.cfg 可显式指定编译器配置;runner 不会更改全局编译器设置,也不会添加 -FcUTF8
该套件检查真实的原生可执行文件格式,并写出包含编译器/依赖版本、源码哈希、可执行文件哈希、结果与限制的 JSON 报告
随库附带的 Tests/Native 测试夹具覆盖 PDF 保存/重载/渲染、文本工作流、加密、元数据、签名、真实 HTTP/TSA 流量以及负面安全用例