PDFium Delphi Component 是一套完整、专业级的组件库,为 Delphi 与 C++Builder 应用带来强大的 PDF 处理与查看能力。它使用 PDFium 渲染引擎进行页面渲染与文档读取,并用 Object Pascal 实现该引擎未提供的其余全部能力
评估这套库时,这一区分非常关键。PDFium 负责绘制页面、提取文本和读取既有结构;它无法签署文档、写入加密、校验 PDF 标准,也无法产出线性化或增量修订。PDFium Delphi Component 附带约 115,000 行 Object Pascal 代码,分布在 55 个单元中,其中超过 62,000 行位于 36 个在 PDFium API 中完全没有对应物的单元——涵盖密码学、签名、加密、标准合规、PDF 序列化、表单数据交换、排版与文字整形。所有代码均以源码形式交付
该库由三个已注册的组件构成:TPdf 负责文档处理与操作,拥有 475 个公开成员;TPdfView 负责交互式视觉呈现,拥有 152 个公开成员;TPdfThumbnailView 负责页面导航。无论你需要构建简单的 PDF 查看器、签名文档工作流、归档转换管线,还是完整的文档管理系统,PDFium Delphi Component 都能提供所需的工具与灵活性
以下能力在 PDFium C API 中没有对应物。每一项都由 PDFium Delphi Component 用 Object Pascal 实现,依据已公开发布的 ISO、ETSI、IETF 或 FIPS 条款进行验证,并以源码形式提供
提供完整的签名能力,而不只是读取签名。PDFium 只能报告签名字典存在;PDFium Delphi Component 则能创建签名
SignPades、SignPadesToStream 和 SignPadesBytes 实现/Certs、/OCSPs 与 /CRLs 的文档安全存储(DSS),支持逐签名 VRI 字典以及 /Extensions /ESIC 标记/SubFilter /ETSI.RFC3161 覆盖整个文件的文档时间戳字典ICmsSigner 接口之后,任何其他后端都可实现该接口PreparePadesRemoteSignature 与 CompletePadesRemoteSignature 把操作拆分为两步,使私钥可以留在远程服务或硬件模块内ValidatePades 报告文档达到的最高基线级别以及条款级问题代码;ValidatePadesTrust 与 ValidatePadesTrustAsync 增加证书链信任检查SignPadesWithPdfA 依据 EN 319 142-1 附录 A.7,在一次调用中完成到 PDF/A-4 的转换与签名PDFium 能打开加密文件,但不负责写入加密。PDFium Delphi Component 依据 ISO 32000-2 及其技术规范实现了加密写入端
SaveAsEncrypted 支持 V=5 / R=5 / R=6 密钥派生,包括算法 2.B 的哈希迭代,以及 /O /U /OE /UE /Perms 字典条目/Length 并重建交叉引用表/AuthCode 令牌——采用 HKDF 密钥派生、密钥包装与 HMAC 验证的 CMS AuthenticatedData六大 ISO 标准族,每个都配备返回条款级结果代码的校验器,以及配套的保存或标记注入路径
引擎只提供一种顺序的整体文件保存。应用经常需要更多能力,因此 PDFium Delphi Component 在引擎的语义输出之上自行编写修订
SaveAsLinearized 生成 Fast Web View 文件,包含首页对象分组、两个交叉引用节,以及附录 F 的页偏移与共享对象提示表SaveAsObjectStream 把符合条件的对象按页局部顺序归入 /ObjStm,并实现完整的 type 2 交叉引用覆盖BeginIncrementalSave 与 CommitIncrementalSave 只把变更与新增的间接对象追加到加密或未加密来源,逐字节保留先前输出以及 /Prev、/Encrypt、/Info 与永久 /ID;无变更的提交不会使文件增长SaveAsRepaired 写出单修订副本,并在交付前用独立的严格加载重新验证TPdf.PdfVersion 复用 PDFium 解析器状态,只执行八字节文件头保护检查,而无需重新解析源文档TPdfRandomAccessStore 把中间数据保留在内存中,直至达到 SaveMemoryLimit,随后迁移到独占的关闭即删除临时文件;核心保存后处理对全部三个工作区采用同一策略,而默认的打开动作与页标签 catalog 更新则使用有界窗口和稀疏索引/AF 数组,可挂接到 catalog 或目标页面,支持 Table 45 中的八种关系值IPdfOcrProvider 接受任意识别引擎——组件提供页面位图并写出得到的可搜索文本层,支持逐页状态与既有文本跳过GetStructuredText 依据字符几何与 Tagged PDF 语义构建页面 / 块 / 行 / 样式跨度的层级;ExtractTables 与 ExtractDocumentTables 检测带边框与空白对齐的表格,保留合并跨度,评估置信度,并输出 CSV 或 JSONBuildReflowDocument 把固定版式 PDF 转换为节点树,其安全 HTML 输出保留标题、段落、列表、图形、页面分节与表格跨度MeasureText 与 WrapText 提供词换行,而无需向页面添加任何内容TPdfStreamInspector 在显式的来源、原始、解码、扩展比与流数量预算内解码任意流对象,返回结构化状态,而不会在恶意构造的文件上耗尽内存TPdf 是 PDF 处理体系的核心,负责所有文档级操作,包括加载、保存、文本提取、表单处理与元数据管理
TPdfView 是一个功能完备的可视化控件,提供具备完整用户交互能力的 PDF 查看体验
LoadCustomDocument 从文件、流、内存缓冲区或按需 TStream 适配器加载 PDF 文档,提供兼容、严格与恢复三种策略以及结构化 xref 诊断SaveAsRepaired 创建经独立严格验证的单修订修复副本SaveAsPdfA / SaveAsPdfAToStream 创建 PDF/A-1b 输出,使用随附的 sRGB ICC 配置文件,也支持自定义配置文件ValidatePdfA 与只读的 PdfAConformance 属性进行 PDF/A 校验MergeFiles(有界来源批量合并)、ImportPagesByIndex(子集导入)、ImportNPagesToOne(N-up 拼版)、MovePages(原地重排)CreateXObjectFromPage 与 InsertFormObjectFromXObject 把一页盖章到多页RenderPageProgressive 与 IPdfCancellationToken 实现可取消的渐进式渲染TPdfProgressiveDocument 实现原生渐进式下载,包括稀疏字节范围提示、优先级范围调度、有界重试、取消,以及文档、表单与页面的可用性闸口SaveAsLinearized 输出 Fast Web View 文件,包括首页对象分组、两个交叉引用节,以及附录 F 的页偏移与共享对象提示表SaveAsObjectStream 实现现代 PDF 1.5+ 对象打包,包括有界 ObjStm 组、页局部排序与完整的 type 2 xref 覆盖BeginIncrementalSave 与 CommitIncrementalSave 进行脏对象修订会话,包括加密前缀保留、继承安全参数、无操作提交、严格重开验证、持久旁路文件、原子替换、回滚以及逐提交统计TPdfRandomAccessStore 与 SaveMemoryLimit 提供有界的随机访问工作存储,包括安全的临时文件溢写、定位 I/O 与逐次保存峰值诊断FitMode 决定页面在视口中的呈现方式(手动缩放、实际大小、适合页面、适合宽度);在 Resize 与翻页时自动重新应用PageColor 把渲染的 PDF 页面背景与外层控件的 Color 解耦,适合深色模式查看器HighlightSearchText 与 ClearHighlight 高亮搜索结果PageShadowSize / PageShadowColor)与页面边框(PageBorderColor)LinkOptions)的安全链接点击处理,以及 OnAnnotationLinkClick / OnWebLinkClick 事件AllowUserPageChange、ChangePageOnMouseScrolling、AllowUserTextSelection)TPdfThumbnailView 侧栏组件进行缩略图导航| 项目 | 说明 |
|---|---|
| 渲染引擎 | Google PDFium — 业界标准的 PDF 引擎,经久考验 |
| PDF 支持 | PDF 1.0 至 1.7 版本,含加密与密码保护文件 |
| 平台兼容性 | Windows 32 位与 64 位应用 |
| IDE 支持 | Delphi XE5 / C++Builder XE5(RAD Studio XE5)至 Delphi/C++Builder 13.1 Florence(RAD Studio 13.1)、Lazarus 3.8+ |
| 字符编码 | 完整 Unicode 支持,多语言文本处理 |
| 内存管理 | 面向大文档优化,资源使用高效 |
| 线程安全 | 单线程设计(遵循 PDFium 要求) |
PDFium Delphi Component 采用分层架构模式,清晰划分关注点,最大化代码复用:
| 层 | 文件 | 职责 |
|---|---|---|
| VCL 组件 | PDFium.pas, FPdfThumbnail.pas | 带设计期支持的 Delphi VCL 组件(TPdf、TPdfView、TPdfThumbnailView) |
| API 绑定 | FPdfView.pas, FPdfDoc.pas, FPdfText.pas, FPdfEdit.pas, FPdfAnnot.pas, FPdfFormFill.pas, FPdfPageOps.pas, FPdfAttachment.pas, FPdfSignature.pas, FPdfStructTree.pas, FPdfDataAvail.pas, FPdfExtensions.pas, FPdfFWLEvent.pas, FPdfCompress.pas, FPdfUtils.pas | PDFium DLL 调用所用的函数指针声明 |
| PDF/A 流水线 | FPdfPdfa.pas | PDF/A-1b 生成(XMP 注入、sRGB ICC OutputIntent、catalog 更新)与校验(合规级别检测、问题枚举) |
| 异步基础设施 | FPdfAsync.pas | IPdfCancellationToken / IPdfCancellationTokenSource、PdfNoCancellationToken 单例,以及面向长耗时渲染与导出工作的 TPdfFuture<T> 辅助类 |
| 几何辅助 | FPdfMatrix.pas | FS_MATRIX 的 OO 封装,提供 Translate、Scale、Rotate、Flip、Skew、Multiply 等辅助方法 |
| 页面操作 | FPdfPageOps.pas | FPDF_ImportPagesByIndex、FPDF_ImportPages、FPDF_ImportNPagesToOne、FPDF_MovePages 的封装,可伸缩的文件支撑批量调度,以及 Form-XObject 辅助(CreateXObjectFromPage / InsertFormObjectFromXObject) |
| 缩略图侧栏 | FPdfThumbnail.pas | TPdfThumbnailView — 可滚动的逐页缩略图侧栏,带悬停、选中与 OnPageClick 导航 |
| 原生引擎 | DLLs\Win32|Win64\pdfium.dll and pdfium.v8.dll | Google PDFium 原生渲染引擎,可选 V8 启用版本 |
TPdf 成员和 36 个开箱即用的工程缩短开发时间PDFium Delphi Component 旨在让你即刻投入生产。组件库包含:
无论你要构建简单的 PDF 查看器,还是复杂的文档处理系统,PDFium Delphi Component 都能为你的 Delphi 与 C++Builder 应用打下专业级 PDF 能力的基础