losLab 软件开发博客

PDFium Component

Software Development Blog

PDFium Component

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

在信任一份 PDF 之前,先枚举它的风险面,了解 PDFium 如何在 Delphi 中读取文档 JavaScript、启动动作以及签名权限,用于安全审计,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

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

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

PDFium Component

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

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

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

用 PDFiumPas 在 Delphi 中跨 PDF 移植 AcroForm 字段

PDFiumPas 如何在 Delphi 中把 AcroForm 字段从一个 PDF 移植到另一个:GraftPdfAcroForm 克隆整张字段对象图,重映射控件页码,移植映射按事务回滚,歧义情形一律失败即拒

PDFium Component

用 PDFiumPas 在 Delphi 中自适应重采样 PDF 图像

PDFiumPas 在 Delphi 中降采样 PDF 图像时按图像细节选盒式、双线性、双三次或 Lanczos 核,颜色以感知 alpha 的形式累加,并有严格工作内存预算兜底,超预算图像原样保留并计入报告

PDFium Component

用 PDFium Component 做 Delphi PDF 注解评审

在 Delphi 中构建一个 PDF 注解评审面板:按页一次性建立好索引、应对外观流对颜色的否决,以及不留残影地重新着色、删除和新增评审标记

PDFium Component

Delphi 分带 PDF 渲染中的负 Y 偏移

PDFium Delphi 组件如何按水平带渲染超大页面:负 Y 偏移如何保持整页几何关系,以及 PNG 和 TIFF 如何流式输出并控制峰值内存

PDFium Component

从 Delphi 在 PDF 中内嵌 CID Type 2 字体

PDFium Component 在 Delphi 中用 CID Type 2 字体在字形级别写入文本,生成 CID 到 GID 的映射与 ToUnicode 映射,使已成形文本仍可被提取

PDFium Component

在任意目标平台上加载 PDFium 原生库

PDFium 组件定位原生库的四段有序搜索链:DLLs 目标子目录、可执行文件旁的备用布局、扁平布局与系统目录,以及编译器目标宏里的一个大写字母如何在 Linux 上悄悄毁掉整条查找链

PDFium Component

Delphi 与 FPC:PDFium 代码的四个隐藏陷阱

Delphi 与 FPC/Lazarus 之间的四处隐藏差异会打中同一份 PDFium 代码:记录临时变量的生命周期、范围检查、E2010 的 TBytes 转型,以及 AnsiString 的字节丢失

PDFium Component

Delphi 中 PDFium 按字节范围加载嵌入 PDF

了解 PDFium Component 如何在 Delphi 中直接从一段 TBytes 字节范围加载嵌入式 PDF,涵盖防溢出边界检查与借用缓冲区的生命周期规则,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

在 Delphi 中不能静默修改加密 PDF

PDFium Component 在 Delphi 中遇到加密 PDF 时会拒绝执行不安全的增量更新、合规标记注入以及 PAdES 签名操作,以符合规范要求,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

eIDAS 可信列表与合格 PDF 签名

PDFium 组件如何在解析欧洲 eIDAS 可信列表之前先完成真实性验证,让新抓取的列表与缓存快照通过同一个验证器,并把合格状态与普通证书链信任分开记录、彼此互不覆盖,使两类结论始终可见

PDFium Component

Delphi 中 PDF 表单字段的导航(PDFium 组件)

说明程序填好的 PDF 表单为何在 Acrobat 中显示为空白,以及如何用 FormFill 子系统、键盘字段遍历和 GenerateFormAppearances 修复它,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

FPC for 循环缺陷:点击 Cancel 无法停止打印

Delphi 与 FPC PDF 查看器中的三层打印循环在点击 Cancel 后仍继续渲染,原因是 Free Pascal 会在循环开始时就锁定 for 循环的上限值,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

Delphi PDF 2.0 AES-GCM 加密:ISO/TS 32003

使用 PDFiumPas 在 Delphi 中写出 ISO/TS 32003 AESV4-GCM 加密 PDF:R7 密钥派生、独立的 PDF MAC 完整性令牌与 ValidatePdfMac 状态检查

PDFium Component

面向 FPC 的 PDFium VCL libcurl 时间戳后端

非 Windows 目标上 PDFium VCL 通过动态绑定八个符号的 libcurl 发送 RFC 3161 时间戳查询,空 Expect 头与 CURLOPT_NOSIGNAL 两个设置决定传输在负载下会不会挂死

PDFium Component

Delphi 中用 PDFium 做低视力 PDF 颜色滤镜

给 Delphi 的 PDF 查看器加上暗色与低视力阅读模式:渲染之后的反色处理、两种互相矛盾的灰度,以及在每种滤镜下都保持可见的叠加层颜色

PDFium Component

在 Delphi 中用 macOS 钥匙串身份签署 PAdES

PDFium VCL 在运行时用 dlopen 和 dlsym 绑定 Security 框架符号,让 macOS 钥匙串签名后端在任何平台都可编译,并把每个无法解析的符号名字逐一报出来

PDFium Component

在 Delphi 中读取和写入 PDF 标记内容

PDFium Component 通过 PageObjectMarks、AddPageObjectMark 与 PageObjectMarkedContentID 从普通 Delphi 代码读取并写入 BDC 标签、类型化属性列表与 MCID,把标签化 PDF 与 PDF/UA 所依赖的内容层结构直接暴露出来

PDFium Component

Delphi中PDFium矩阵前乘与后乘:轴心旋转

了解 PDF 行向量约定如何让 Delphi 中的 Multiply 变成后乘、PreMultiply 变成前乘,为什么 PreTranslate 需要用到线性部分,以及轴心辅助函数的组合方式

PDFium Component

Delphi 中 PDF 名称树与编号树编辑

PDFium Component 在 Delphi 中重建 ISO 32000 名称树与编号树:平衡节点、正确的 /Limits、稳定的根对象身份,以及写入后重新读取、逐条比对的自校验增量保存

PDFium Component

在 PDFium VCL 中用 OpenSSL 验证 PDF 签名

PDFium VCL 通过 IPdfCmsVerifier 把 OpenSSL CMS 验证器插入 PAdES 校验;共享内容 BIO、no-verify 标志与空库 CRL 检查这三个 OpenSSL 行为,不处理就会静默产出自信却错误的判定

PDFium Component

用 PDFiumPas 在 Delphi 中做 PDF 操作符级涂黑

PDFiumPas 的 SaveAsRedacted 在操作符级拆分只被部分覆盖的文字、矩形路径和轴对齐图像,按原字体与矩阵重建幸存部分,再剪枝无引用资源;无法诚实重建的字符一律失败即拒

PDFium Component

PDFium 可选导出:Delphi 中的能力门控

当 pdfium.dll 比绑定层版本更旧时,一个缺失的导出就足以让加载崩溃,了解 PDFium Component 如何在 Delphi 中对可选导出做门控并安全降级,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

Delphi 中 PDF 大纲编辑与页面重映射

PDFiumPas 如何在 Delphi 中于页面移动或消失后重写 PDF 大纲项:有符号 Count、兄弟链维护、ApplyPageMap 按页面计划重定向目标,增量保存后再独立重载核验,坏树拒绝交付

PDFium Component

Delphi 中 PDFium 页面对象句柄在变换后失效

为什么在 Delphi 中执行 FPDFPage_TransFormWithClip 之后 PDFium 页面对象句柄读到的还是旧坐标,以及修复它所需的重载顺序和 getter 哨兵值 当 重写一个页面时,你手上已经持有的每一个 句柄,描述的依然是变换之前的那次解析结果。面向 Delphi 和 C++Builder

PDFium Component

PDF/A 实现限制与字体编码检查

PDFium Component 校验 ISO 19005-1 Annex C 的 127 字节名称、8191 元素数组、4095 条字典与 28 层嵌套限制,并报告符号化 TrueType 字体携带的 /Encoding 条目,全程基于字节扫描无需加载 PDFium DLL 即可拿到判定结论

PDFium Component

在 Delphi 中校验 PDF/光栅扫描文档

PDFium Component 的 ValidatePdfRCompliance 在 Delphi、C++Builder 与 Lazarus 中按 ISO 23504-1 校验扫描文档 profile,逐页核对恰好单张带状图像、禁止字体与未授权图像编码,并返回合规级别与一组具体可处置的问题清单

PDFium Component

Delphi PKCS#11:CK_ULONG 与打包陷阱

PDFiumPas 在 Delphi 中通过 PKCS#11 令牌签署 PAdES:Windows 上 CK_ULONG 为 4 字节、LP64 上为 8 字节,打包不同时函数表也会移位

PDFium Component

在 Delphi 中把 PDF 内容重排为响应式 HTML

BuildReflowDocument 把固定版式的 PDF 转成语义化重排模型,ToHtml 再导出自包含 HTML:标题还是标题、列表还是列表,检测到的表格保留表头与跨行跨列,不引用任何外部脚本或样式表

PDFium Component

Delphi 中遗漏渲染锁的六个 PDFium 调用

PDFiumPas 的渲染锁可防止并发 UnloadPage 或 ReloadPage 影响光栅化,但直到 v2.26.0,六个 TPdf 和 TPdfView 调用仍未使用它 PDFiumPas 的渲染锁是按文档划分的临界区——由 上的 字段支持的 和 ,用于包围每一次进入 PDFium

PDFium Component

用 PDFiumPas 在 Delphi 中做稀疏惰性 PDF 对象索引

PDFiumPas 如何不加载整个文件就读取单个 PDF 对象:只留稀疏 xref 段描述符,对象流按需惰性解压,混合 XRefStm 正确注册,所有读取都走有界的 1 MiB 窗口,大文件不再按 /Size 分配数组

PDFium Component

PDFium VCL:Delphi 中的结构化 PDF 文本提取

使用 PDFiumPas 的 GetStructuredText 在 Delphi 中把 PDF 文本提取为区块、行和带样式的文本片段:阅读顺序选择、标签增强信息与失败即关闭的预算控制

PDFium Component

用 PDFium 在 Delphi 中控制 PDF 字体替代

ConfigureSystemFontProvider 装上一个 IPdfSystemFontProvider,接管 PDFium 的每次字体映射请求:拿到字体名、字重、斜体标志和字符集后交回你自己的 TrueType 字节,渲染不再看机器上装了什么字体

PDFium Component

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

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

PDFium Component

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

使用 PDFium 修复 Delphi 中缩略图重复旋转和适配缩放错误,了解渲染旋转参数为何会叠加,以及 90 或 270 度页面为何必须先交换宽高,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

不依赖 Uniscribe 的 PDF 文本双向嵌入级别

为什么把 PDF 文本排版从 Windows 移植出去意味着亲自实现 UAX #9 双向算法,以及两个会让星形平面字符损坏成孤立代理对、或让重排序被整体悄悄跳过的实现错误与各自的修复方式

PDFium Component

Delphi 中用 PDFium 字符框实现 PDF 文本行选取

一个 PDF 文本页里并没有行对象,了解 PDFium Component 如何从 FPDFText_GetCharBox 的几何信息聚类出视觉行,并在选取路径间共享辅助函数,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

PDFium Delphi表单中控件索引与批注索引的区别

了解 PDFium Component 如何在 Delphi 中把表单字段索引与批注索引区分开:按子类型过滤控件、只在原生调用边界做映射,并修复无界面模式下的焦点问题,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

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

在 Delphi 中使用 PDFium 词框同步文本转语音与页面词语高亮:TrackReadingWordAt、渲染顺序、自动滚动,以及需要注意的 Unicode 陷阱,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

为什么 Delphi 中 PDFium 的 XFA 字段编辑保存后会消失

PDFium Component 只把 XFA 字段编辑写入内存缓冲区,因此 Delphi 应用保存后会丢失字段值;AcroForm 可以持久化,而 XFA 不行 PDFium Component 中的 会写入当前获得焦点的表单字段实时编辑缓冲区;对于 XFA 表单,这个缓冲区永远不会进入会被序列化到磁盘的

PDFium Component

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

在 Delphi 中使用 PDFium 组件运行 AcroForm JavaScript:了解为什么字段计算会保持静默、V8 DLL 的具体要求,以及能否决高风险动作的宿主事件,适用于 Delphi、C++Builder 和 Lazarus 项目

PDFium Component

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

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

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