losLab 软件开发博客

PDF Programming

Software Development Blog

PDF Programming

使用 PDFium 进行自动化 PDF 预检和风险审计

在 Delphi 中使用 PDFium C API 实施自动化 PDF 预检:检测启动与 JavaScript、图像 DPI 计算、权限位和 PDF/A 声明 一份 PDF 进入生产边界后——例如打印队列、归档入口或客户上传入口——应该先经过审计再让任何渲染逻辑执行 一个 PDF

PDF Programming

在 Delphi 中使用文本转语音功能构建无障碍 PDF 查看器

在 Delphi 中将 SAPI 单词边界事件与 PDFium 单词几何形状关联:语音线程上的 COM 生命周期、PDF 到像素的转换以及同步高亮显示 一个朗读按钮的演示可能只需要一个下午,但完善它却要花上一周时间。下午的版本提取页面文本,将其交给 SAPI,并获取音频。而那一周则用于让该功能真正可用:语音绝不能冻结窗

PDF Programming

在 Delphi 中使用 PDFium 组件构建连续滚动 PDF 查看器

在 Delphi 中使用 PDFium 组件构建连续滚动 PDF 查看器:为什么一次渲染所有页面会耗尽内存,以及可见页面渲染如何保持平滑。 在舒适的阅读缩放比例下渲染的单张 A4 页面,大约为几个 MB 大小的 32 位位图;将其乘以一份 400 页的合同,算术就不再抽象了:预先渲染每一页,您向 Windows

PDF Programming

在 Delphi 中处理 Office 混合引用 PDF

在 Delphi 中识别 Office 导出的混合引用 PDF:检测 /XRefStm 尾部标记并将其路由到正确的处理链路 从 Microsoft Word、Excel 导出为 PDF 的文件,大多数是混合引用文件。它同时包含两套交叉引用:一套传统定长表供老读取器使用,另一套压缩后的交叉引用流供现代解析器使用,关键桥接

PDF Programming

面向超大文档的高性能 AES-256 PDF 加密

为何超大 PDF 的 AES-256 加密是大量小粒度 CBC 处理,而非单次流式加密:复用 CNG 句柄、复用缓冲并评估 R6 KDF 成本 2 GB PDF 表面上像是一次流式写入,但这是一种误导。ISO 32000-1 §7.6 规定加密按对象粒度计算,每个流和字符串都带独立 IV 与填充

PDF Programming

适用于 Delphi 的 losLab PDF 库:HotPDF、PDFium Component 与 PDFlibPas 比较

HotPDF 在 Delphi 中创建 PDF 输出并填充 AcroForm 字段。PDFium Component 渲染并从现有 PDF 中提取文本。PDFlibPas 处理合规性签名。 三个库,三项截然不同的任务。选错库会让你花费数周时间去寻找变通方法,而在只需要一个库时却选了全部三个,则会带来你未曾预算过的维护开

PDF Programming

Delphi 中的内存安全 PDF 解析:防御恶意文档

在 Delphi 里防御式解析 PDF:验证流长度和 CCITT 解码参数,约束 xref 偏移,限制解压膨胀,并检测对象图中的递归结构 文档入库流水线会接收来自陌生来源的文件 发票、扫描件、网页表单附件都声称自己是 PDF 并携带数百个数值供解析器执行 这些值都是文件生成方写下的,包括流长度、图像参数、字节偏移、对象

PDF Programming

在 Delphi 中优化 GB 级 PDF 处理的 IO 性能

为何 2GB PDF 在 32 位 Delphi 上会因完整文件 MapViewOfFile 失败,以及如何通过 64 MB 滑动映射窗口和更少的 ReadFile 系统调用恢复吞吐 A PDF parser 的第一次有效读取发生在文件尾部而不是开头,格式会把 指针放在末尾字节,所以处理 1.8 GB 文件会先

PDF Programming

Delphi 中的 HotPDF 页面提取性能

从 PDF 提取页面应该只需几秒钟。这篇文章追踪了 HotPDF Delphi 工作流中真正的性能瓶颈,并展示了哪条 API 路径能恢复预期的速度。 从一个 40 页的 PDF 中复制 3 页需要两分钟,这已经不是性能调优的问题了,而是一个使用了错误 API 路径的信号。当我第一次在一个 HotPDF

PDF Programming

使用 losLab PDF 库将 PDF 页面缩放至 70%

如何使用 losLab PDF 库中的 CapturePage 和 DrawCapturedPage 将每个 PDF 页面缩放至 70%,包含居中计算方法以及可运行的 C# 和 Delphi 示例代码。 PDF 页面的尺寸在创建时就已固定,因此你不能像调整图片大小那样,直接在原地对内容进行缩放

PDF Programming

在 Delphi 中使用 losLab PDF 库将 RTF 转换为 PDF

使用 losLab PDF 库在 Delphi 中将 RTF 转换为 PDF:GetCanvasDC 创建一个虚拟 DC,EM_FORMATRANGE 对内容进行分页,LoadFromCanvasDc 保存每一页。 RTF 存在的时间已经足够长,以至于它会出现在没人预料到的地方:遗留的报表生成器、邮件合并管道,以及早于