losLab 软件开发博客

PDFium Component

Software Development Blog

PDFium Component

在 Delphi 中使用 PDFium Component 读取 PDF 字体属性

在 Delphi 中使用 PDFium Component 检查 PDF 内部的字体:读取字形的家族名称、基本名称、字重、斜体角度,以及字体是否嵌入。 PDF 中的每个可见字符都带有对绘制它的字体的引用,而 PDFium Component 允许您沿着该引用追溯到字体对象并读取它所知道的内容

PDFium Component

Delphi 中使用 PDFium 审计 PDF 安全风险

在信任 PDF 之前先枚举其风险面。本文介绍 PDFium Component 如何在 Delphi 中读取文档 JavaScript、启动操作、URI、嵌入文件、XFA 与签名 MDP 权限,生成只读审计报告而不执行文档中的动作,适合上传文件检查、合规预检和安全隔离工作流使用

PDFium Component

在 Delphi 中使用 PDFium 组件构建功能丰富的 PDF 查看器

在 Delphi 里拿 PDFium 组件攒个正经的 PDF 查看器:把 TPdf 跟 TPdfView 穿上一条裤子,搞定文档加载和渲染,再加上翻页、缩放和各种适应模式的门道。 在 Delphi 里搞个 PDF 查看器,说白了就是摆上俩组件,再把它俩拿线连起来的事儿。 攥着文档的大权:开文件、解密全归它管,别人要是问

PDFium Component

在 Delphi 中使用 PDFium 组件将扫描的图像合并成一个 PDF

一份实用的 Delphi 代码配方,教你如何用 PDFium 组件把满满一文件夹的扫描图片揉成一个 PDF:建文档、一图一页、缩放自适应、最后存盘,一套带走。 有个理赔团队正对着一台自动馈纸式扫描仪发愁,这破机器把他们积压了三十年的纸质档案一通猛扫,直接在文件夹里吐出了一大堆按着 、 这样往下排的单页 JPEG 图片

PDFium Component

在 Delphi 中使用 PDFium 组件将 PDF 页面渲染为 JPEG 图像

在 Delphi 中使用 PDFium 组件把 PDF 页面给光栅化成 JPEG:把 DPI 换算成像素尺寸,把每一页都渲染成位图,最后用选好的画质交给 TJPEGImage 去压缩编码。 把一页 PDF 渲染成 JPEG,其实就是两步,先把页面按你选定的分辨率光栅化成位图,再把位图交给 JPEG 编码器并选定画质

PDFium Component

在 Delphi 中使用 PDFium 组件从头开始创建 PDF 文档

在 Delphi 中使用 PDFium 组件凭空捏出一个 PDF:掌握 CreateDocument、AddPage、AddText 和 CreatePath,外加那些绝对会咬人的坐标系和字体嵌入暗坑。 PDFium 满江湖的声名都是靠着当“阅读引擎”打下的,它是 Chrome 那个 PDF 标签页背后的无名英雄

PDFium Component

在 Delphi 中使用 PDFium QuadPoints 实现文本标记注释

在 Delphi 中使用 PDFium 创建高亮和下划线注释:QuadPoints 顺序、为什么 FPDFAnnot_SetAttachmentPoints 返回 false,以及 Append 修复 PDFium Component 通过 创建文本标记注释,包括高亮、下划线、删除线和波浪线:您在 记录上设置

PDFium Component

在 Delphi 中部署 PDFium DLL:修复加载失败

诊断 Delphi 中 pdfium.dll 的加载失败:修复 32/64 位 ERROR_BAD_EXE_FORMAT 193 错误,识别过时的 DLL,并在线程间安全加载 PDFium 组件 当 pdfium.dll 拒绝在客户机器上加载时,适用于 Delphi 和 Lazarus 的 PDFium

PDFium Component

在 Delphi 中使用 PDFium 检测和提取 XFA 表单

在 Delphi 中检测 XFA 表单并使用 PDFium 组件提取 template、datasets 和 config 数据包为原始 XML:静态包读取无需 V8 运行时 是的——PDFium 支持 XFA 表单,但有一个重要的划分。PDFium 组件可以检测 XFA 表单并使用标准 DLL 将其 、 和

PDFium Component

在 Delphi 中使用 PDFium 组件进行 XFDF 导出与导入

在 Delphi 中使用 PDFium 组件导入和导出 XFDF 表单数据和批注:ISO 19444-1 往返处理、18 种批注子类型以及区域设置安全的数字 适用于 Delphi 和 Lazarus 的 PDFium 组件通过 XFDF(由 ISO 19444-1 定义的 XML 交换格式)交换表单数据和批注;

PDFium Component

在 Delphi 中使用 PDFium 组件从 PDF 文档中提取图像

在 Delphi 中使用 PDFium 组件从 PDF 中抠出嵌在里头的图片:摸清 BitmapCount,挨个把 Bitmap[] 给薅出来,防住那个装聋作哑的报错坑,最后把图给存成 JPEG 或 BMP。 PDF 会把图像当作内容流里的一级对象来存放。页面引用照片、扫描件或图表时,像素数据会和页面几何信息一起放在

PDFium Component

在 Delphi 中使用 PDFium 组件提取 PDF 文件文本

在 Delphi 中使用 PDFium 组件提取 PDF 文本:通过 Character[] 进行原始字形访问、通过 ReadablePageContent 提取段落结构,以及 Active 静默失败防护。 PDF 文本提取看起来很简单,直到您遇到一个文本层缺失、损坏或被拆分为几十个没有意义顺序的微小字符运行的文档;P

PDFium Component

强化 PDFium Component 绑定:ABI 与内存安全性

Pascal 封装 C 库时,调用约定、整数宽度、异常边界和句柄所有权都必须明确。本文梳理 PDFium Component 绑定中的 cdecl、FPC Win64 size_t、异常传播、双重释放、托管记录和 DLL 导出清理问题,并说明修复方法,帮助 Delphi 与 Lazarus 集成避免崩溃

PDFium Component

在 Delphi 中检查 PDF 签名和 PAdES 级别

在 Delphi 和 Lazarus 中使用 PDFium 组件读取 PDF 签名:检查 SubFilter、ByteRange 和 CMS,并检测 PAdES B-B 到 B-LTA 基线级别 您收到了一份已签名的 PDF,并且需要在查看器中显示是谁签的名、何时签的名、签名是否覆盖了整个文件,以及它在长期合规方面达到

PDFium Component

Delphi 中的长期 PDF 签名:PAdES B-LT 和 B-LTA

在 Delphi 中使用 PDFium 组件添加长期 PAdES 签名:RFC 3161 时间戳、DSS 验证存储和用于 B-T、B-LT 和 B-LTA 的 DocTimeStamps 为了使已签名的 PDF 在数年后(在签名证书过期且其 CA 轮换后)仍能进行验证,PDFium 组件可以在 Windows

PDFium Component

在 Delphi 中使用 PDFium 组件将多个 PDF 文件合并为一个文档

在 Delphi 中使用 PDFium 组件合并 PDF:搞懂 ImportPages、页码范围字符串、插队位置,对付装死烂文件,还有搞清表单字段到底能不能一起合过去。 用 PDFium 组件去合并 PDF,大门只有一扇: 。不管你要怎么合,套路永远是那老一套:先造个空荡荡的接收文档(destination),挨个去开

PDFium Component

使用 PDFium 进行 N-up 拼版与页面重排

使用 PDFium 在 Delphi 中把多个页面拼到一张纸上、原位重新排序,或按索引导入页面子集。本文解释 ImportNPagesToOne、MovePages 和 ImportPagesByIndex 的尺寸单位、索引语义、返回句柄和释放责任,避免泄漏与双重释放,适合打印排版、页面编辑器和文档抽取工具

PDFium Component

在 Delphi 中安全地解析 PDF 字典:防范名称 Token 陷阱

为什么子字符串键查找会损坏 Delphi 中的 PDF 字典解析:遵循 ISO 32000-1 的完整名称 Token 匹配以及针对恶意 PDF 的资源上限限制 子字符串搜索(例如 )是读取 PDF 字典的错误工具,因为 PDF 名称键共享前缀: 是 的前缀,而 是 的前缀;ISO 32000-1 §7.3.5

PDFium Component

PDFium Component:无障碍 PDF 阅读器设计(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 无障碍 PDF 阅读器设计实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium

PDFium Component

PDFium Component:注释审阅界面(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 注释审阅界面实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL

PDFium Component

在 Delphi 中使用可取消的 Futures 进行后台 PDF 渲染

耗时的 PDF 渲染应当置于 UI 线程之外。看看 PDFium 绑定如何利用 Delphi 中可取消的 futures 在后台线程上运行任务 在 PDFium 中渲染页面是同步的。你调用该库,它光栅化到位图中,当像素写入完成后控制权返回。对于单一屏幕尺寸、单一缩放级别的页面,这只需几毫秒,没人会注意到

PDFium Component

在 Delphi 中实现可取消的渐进式 PDF 渲染 (PDFium)

耗时的页面渲染不应冻结 UI 或运行到结束。本文说明 PDFium 在 Delphi 中如何通过 IFSDK_PAUSE 实现可取消的渐进式渲染 大多数 PDF 页面在几毫秒内就能光栅化,通常不会引起关注,但当用户打开一张 A1 的工程图纸、一个包含数万个向量笔触的页面,或一个挤满透明度组与柔和蒙版的海报时,单次绘制调

PDFium Component

Delphi 对比 FPC:PDFium 构建中 4 个隐秘的 PDF 代码陷阱

Delphi 和 FPC/Lazarus 之间针对相同 PDFium 代码的四个隐秘差距:记录临时生命周期、范围检查、E2010 TBytes 类型转换以及 AnsiString 字节丢失 相同的 Object Pascal 源码在 Delphi 和 FPC/Lazarus 下的四个行为差异,反复困扰着 PDFium

PDFium Component

PDFium Component:表单字段导航和查看器端验证(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 表单字段导航和查看器端验证实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium

PDFium Component

PDFium Component:低视力颜色滤镜和阅读模式(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 低视力颜色滤镜和阅读模式实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium

PDFium Component

PDFium Component:PDF 接收和审阅工作台(Delphi)

面向 Delphi/C++Builder 的 PDFium Component PDF 接收和审阅工作台实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium

PDFium Component

在 Delphi 中使用 PDFium VCL 实现 PDF/A 归档合规性

在 Delphi 中使用 PDFium Component 产生通过 veraPDF 验证的 PDF/A 归档档:SaveAsPdfA、XMP 与 ICC OutputIntent 注入、a/b/u 一致性,以及其中的陷阱。 你释出了一个会将每个文件标記为 PDF/A-1b 的转换器,客戶的紀录系統将它们摄取

PDFium Component

Delphi 中的批量 PDF 印前检查报告:PDFium 组件 CLI

利用 PDFium 组件在 Delphi 中自动化 PDF/A 与 PDF/UA 印前检查:包括批处理循环、退出代码、JSON 与 HTML 报告,以及为何空发现项并不代表通过 批量印前检查工具是一个没有窗口的控制台程序,它指向一个包含诸多 PDF 文件的文件夹,针对你指定的合规标准验证每一个文件,并留下关于它所发现内

PDFium Component

PDFium Component:渲染缓存和缩放性能(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 渲染缓存和缩放性能实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL

PDFium Component

PDFium Component:安全 PDF 预览界面(Delphi)

面向 Delphi/C++Builder 的 PDFium Component 安全 PDF 预览界面实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL

PDFium Component

在 Delphi 中测量 PDF 文本用于布局与自动换行

在绘制前必须先获取字符串宽度。本文说明 PDFium 绑定如何在不写入页面的情况下测量文本,用于 Delphi 中的自动换行 绘制一段文本的调用本身很直接:你给 传入字符串、字体、字号和位置,字形就会出现。但它不会告诉你绘制后这段字符串会有多宽,也不会自动在边界处断行。一次 总是把文本放在一个位置

PDFium Component

Delphi 中的 PDFium 双重旋转与适合缩放错误

使用 PDFium 修复 Delphi 中缩略图重复旋转和适配缩放错误,了解渲染旋转参数为何会叠加,以及 90 或 270 度页面为何必须交换宽高后再计算缩略图比例和视图尺寸

PDFium Component

Delphi PDFium 查看器中的逐词 TTS 高亮显示

在 Delphi 中使用 PDFium 词框同步文本转语音和页面上的词语高亮显示:TrackReadingWordAt、渲染顺序、自动滚动以及 Unicode 陷阱 朗读功能除了发出声音外,还有一项可见的任务:当每个词被读出时,必须在页面上点亮该词并使其保持在视图中。为了做到这一点,您需要每个词的边界框,并索引到语音引

PDFium Component

在 Delphi 中使用 PDFium 组件打印 PDF 文档

在 Delphi 中使用 PDFium 组件打印 PDF:用 RenderPage 和 rePrinting 渲染页面,靠 StretchDIBits 把位图喂给 TPrinter,还要搞定缩放自适应和旋转。 PDF 的坐标是用磅(points)来量的,而打印机的坐标走的是设备单位,这俩家生来就老死不相往来,除非你亲自

PDFium Component

通过 Form XObject 在 PDFium 中实现可复用页面印章

先绘制一次水印或徽标,再在每一页复用。本文说明 PDFium 的 Form XObject 如何在 Delphi 中实现可复用页面印章,以及句柄生命周期规则 在文档每一页上盖水印或徽标,看起来像是五分钟就能做完的事,直到你用文件体积分析器打开结果才会看见代价。最直接的做法是逐页遍历,然后在每一页上重新构建相同的文本或图

PDFium Component

在 Delphi 中使用 PDFium 组件运行 AcroForm JavaScript

在 Delphi 中使用 PDFium 组件运行 AcroForm JavaScript:为什么字段计算保持静默、V8 DLL 要求,以及否决高风险 PDF 操作的宿主事件 在 Acrobat 中重新计算总和,但在您自有的 Delphi 查看器中保持冻结的表单,几乎绝不是渲染 bug;除非宿主连接了 JS 平台,否则

PDFium Component

在 Delphi 中使用 PDFium 进行 PAdES B-B PDF 签名

在 Delphi 中使用 PDFium 组件为 PDF 添加 PAdES B-B 数字签名:支持自建 SHA-256、CMS 以及用于字节级签名的 Windows CNG 后端 PDFium 组件通过其 方法使用 PAdES B-B 数字签名签署 PDF:它加载文档、对签署的字节范围进行哈希处理、构建 CAdES

PDFium Component

在 Delphi 中使用 PDFium 组件拆分 PDF 文档

如何在 Delphi 中使用 PDFium 组件按页码、范围或书签拆分 PDF:TPdf.ImportPages、CreateDocument、SaveAs 返回值校验,以及 Active 标志重置 PDFium 组件拆分 PDF 时提供了一个方法 。无论你要抽取单页、按任意边界切分,还是按文档书签结构分段,核心都在于

PDFium Component

在 Delphi 中按需流式加载超大 PDF 文件

超大 PDF 无需一次性加载。查看 TStream 适配器如何为 PDFium 提供按需 FPDF_FILEACCESS 回调,以及 Delphi 中如何处理 4 GiB 限制 一个扫描件存档可能会有数十 GB 大小,打开这种 PDF 时,阅读器通常只需要显示一页,例如目录页或书签跳转后的目标页

PDFium Component

在 Delphi 中使用 PDFium 组件并排对比 PDF 文档

在 Delphi 中使用 PDFium 组件构建并排 PDF 查看器:支持两列或三列独立面板,TPdfView.Zoom 分别控制缩放,并支持页面导航同步 两份文档可同时打开并保持同一页码,每份文档显示在各自可滚动的面板里,这就是并排对比查看器的核心。PDFium 组件通过一个非常直接的对象模型提供这条能力:

PDFium Component

校验压缩 PDF:对象流与 XRef 流

现代 PDF 将结构放在压缩对象流与 xref 流中,本文说明 Delphi 校验器如何展开 ObjStm 并读取 PDFium 的 xref 流 trailer 你编写了一个小型校验器。它打开 PDF 后定位文件结尾,找到 ,读取偏移量,并期望在该位置发现 关键字,紧跟一张固定宽度交叉引用表

PDFium Component

在 Delphi 中使用 PDFium Component 实现 PDF/X 验证

在 Delphi 中验证可印刷的 PDF/X 文件:PDFium Component 的 ValidatePdfX 运行针对 TrimBox、Trapped、OPI、LZW 以及字体嵌入的 ISO 15930 检查 适用于 Delphi 的 PDFium Component 通过 验证适合印刷的 PDF/X

PDFium Component

为什么验证器拒绝 PAdES 签名:Delphi 中的 PDFium 分析

为什么 PDF 验证器拒绝 PAdES 签名:全零 ByteRange 字段、缺失的 D: 日期前缀,以及增量更新后丢失的 /Encrypt,使用 PDFium 组件进行解析 在我们使用 Delphi 中的 PDFium 组件进行调试的几乎所有案例中,验证器拒绝 PAdES 签名的原因都不外乎以下三个之一:

PDFium Component

在 Delphi 中使用 PDFium 组件操作 PDF 附件:读取、添加、删除

PDFium 组件在 Delphi 中如何处理 PDF 文件附件:AttachmentCount、Attachment、CreateAttachment、DeleteAttachment、路径清理以及就地保存。 PDF 文件附件存储在文档的嵌入文件树中,这是一种大多数查看器都作为曲别针面板或附件侧边栏呈现出来的结构;从