losLab 软件开发博客

Delphi PDF Library

Software Development Blog

Delphi PDF Library

Delphi 中无障碍 PDF 的自动结构标签

PDF Library for Delphi 的 SetAutoTagMode 在绘图过程中自动把文本、标题、页眉页脚、插图与表格写入结构树,Delphi 与 C++Builder 应用无需逐次手工包裹 BeginTag 与 EndTag 即可产出无障碍 PDF,并自动声明文档为 tagged 让辅助技术识别

Delphi PDF Library

Delphi 中的 PDF 条码:QR、PDF417、DataMatrix

矢量条码在任何尺寸下都能保持清晰打印,了解 PDF Library for Delphi 如何在 Delphi 中绘制 QR、PDF417、DataMatrix 和 Code128 条码,并控制纠错等级与尺寸缩放

Delphi PDF Library

Delphi 通过 CDO 发送 PDF:套间线程处理要点

PDF Library for Delphi 通过 Windows CDO 从 Delphi 发送 PDF 邮件,正确处理 CoInitializeEx 套间初始化,可避免多线程批量发送时出现失败,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 双面扫描配页:PDF 交错合并

PDF Library for Delphi 的 CollateDocumentsEx 每轮从各源文档取 GroupSize 页交错合并,用 3-1 这类降序范围把背面扫描件倒着排回去,页面只导入一次,共享字体也不会被复制两份

Delphi PDF Library

把 PDF 转为 PDF/A 并修复其元数据

ConvertToPDFA 在一次调用里移除所选子集禁用的内容、补齐必需内容、声明 PDF/A 子集并检查结果,RepairDocumentMetadata 让 Info 与 XMP 在 Delphi 进程内对齐,GetPDFAConversionReport 列出仍挡在路上的具体障碍

Delphi PDF Library

Delphi 跨文档 PDF 对象复制:循环崩溃

PDFlibPas CopyForeignObject 如何跨文档深拷贝整个 PDF 对象闭包,以及 /Parent 等循环反向引用为何曾引发崩溃,直到引入显式的进行中状态守卫才得以解决

Delphi PDF Library

Delphi 确定性 PDF ID 实现可复现构建

通过确定性的 trailer ID 让 Delphi PDF 输出逐字节一致:种子如何推导、为何加密文件保持原值不变、还有哪些细节需要固定 只要调用 ,losLab PDF Library 就能对相同输入产出逐字节一致的 PDF 输出。默认情况下,trailer 的 数组是墙钟时间的 MD5

Delphi PDF Library

Delphi 中的 PDF DLL、ActiveX 与 dylib 绑定

PDF Library for Delphi 把同一套扁平 PDF API 做成 Stdcall DLL、Safecall ActiveX 对象与 Cdecl dylib,本文讲清每种绑定背后的字符串编码与句柄归属陷阱

Delphi PDF Library

用纯 Pascal 实现 PDF 的 Ed448 与 Brainpool ECDSA

PDFlibPas 如何在不依赖任何外部加密库的前提下实现 RFC 8032 Ed448 与 RFC 5639 的三条 Brainpool 曲线,并完整复盘开发过程中定位出的六个错误根因、修复思路与可复用的工程方法

Delphi PDF Library

验证电子发票:Delphi 中的 veraPDF 和 Mustang

PDF/A 兼容性不等于发票兼容性,了解 PDF Library for Delphi 生成的电子发票如何在 Delphi 中同时通过 veraPDF 容器检查与 Mustang 业务规则校验,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

PDFlibPas 在 Free Pascal 下的 EMF 矢量导入

6500 行的 EMF 转 PDF 转换器为何只需要改一条条件编译而不是推倒重写,以及指针宽度的 ULONG_PTR hatch 字段如何在 Win64 上悄悄造成图元文件记录读取错位

Delphi PDF Library

在 Delphi 中审计 PDF 加密与权限

用 PDF Library for Delphi 像审计员一样读懂 PDF 的 /Encrypt 字典:算法、密钥长度、AES-256 的 R5 与 R6 之别、权限位,以及 Identity 过滤器陷阱

Delphi PDF Library

Delphi 中的 Factur-X 和 ZUGFeRD 混合发票

电子发票本质是内部嵌入发票 XML 的 PDF/A-3 文件,了解 PDF Library for Delphi 如何在 Delphi 中跨配置文件构建 Factur-X 和 ZUGFeRD 混合发票,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

PDFlibPas 中 FPC Win32 的 OMF 到 COFF 目标文件链接

Win32 上的 Free Pascal 内部链接器只认 COFF,而 Delphi 构建链接的是 OMF 对象。PDFlibPas 为此单独维护一套 FPC 对象,转换后重写段名与段定义符号,并放弃依赖 Delphi 私有 64 位整数辅助例程的 OpenJPEG 对象

Delphi PDF Library

Delphi PDF 中的 GoToR、GoToE 和 Launch 操作

在 Delphi 中使用 PDF Library for Delphi 构建 GoToR、GoToE 和 Launch 动作,实现远程页面跳转、嵌入式 PDF 目标定位与外部程序启动,并规避零基页码陷阱,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 就地表单编辑器中的 OnExit 重入

PDF Library for Delphi 的 TPDFlibViewer 通过 OnExit 事件提交就地表单字段编辑,先将 FInplaceEditor 置为 nil,否则失焦会重入提交逻辑并损坏数据

Delphi PDF Library

JBIG2 编码器后端与 Free Pascal 链接器

PDFlibPas 同时提供原生 Pascal JBIG2 编码器与可选的外部编码器,而把外部后端移植到 Free Pascal 的过程最终需要的是一个 DLL,而不是可直接链接进程序的目标文件

Delphi PDF Library

在 Delphi 中合并与拆分 GB 级 PDF

用 PDF Library for Delphi 的直接访问在毫秒内打开 GB 级 PDF:页面句柄、流式合并列表、页码区间提取与交叉引用表修复

Delphi PDF Library

Delphi中的PDF垃圾回收:标记-清除算法

为什么删除 PDF 页面不会让文件变小?了解 Delphi 中的标记-清除垃圾回收如何借助 trailer 根集合,丢弃孤立对象来真正瘦身,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

在 Delphi 中合并 PDF 表单:重复字段规则

合并两份 AcroForm 文档时同名字段怎么办?PDF Library for Delphi 的 MergeDocumentEx 给出 dfsReject、dfsMerge、dfsAutoNumber 三种策略,冲突检测发生在对象重编号之前,被拒绝的合并不会弄坏任何一方

Delphi PDF Library

对 PDF 签名后的变化分类并执行 DocMDP 策略

PDFlibPas 将当前文档与更早的修订版本逐对象比较,并按白名单把每处差异归入存档更新、表单填写、批注或未分类等修改级别,DocMDP 策略的执行因此简化成一次修改级别的数值比较

Delphi PDF Library

在 Delphi 中将 PDF 页面渲染为 1 位单色

在 Delphi 中使用 PDF Library for Delphi 将 PDF 页面渲染为 1 位单色位图并裁剪子区域,通过 GDI 半色调向下转换实现,无需触碰渲染器本身,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 中的多引擎 PDF 渲染

在 PDF Library for Delphi 中按文件切换内置、Cairo 与 PDFium 渲染器:引擎探测、DPI 缩放陷阱,以及一条会自己交代原因的回退链

Delphi PDF Library

Delphi中的PDF对象流与交叉引用流

了解 losLab PDF Library 如何在 Delphi 中写出 PDF 1.5 对象流与 xref 流:ObjStm 布局、type-2 条目、W 字段宽度与加密规则,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 中的 PDF 图层:Optional Content Groups (OCG)

PDF 图层可用于地图、CAD 图纸和多语言版本,了解 PDF Library for Delphi 如何在 Delphi 中创建和读取 Optional Content Groups 及其配置,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

在 Delphi 中读取 PDF 书签与注释动作

PDF 库大多只能写入书签和注释动作,却读不回来。PDF Library for Delphi 能读出 GoTo、URI、Launch 与 JavaScript 动作,解析目标页、适配类型和坐标,并绕开 SelectPage 那个坑

Delphi PDF Library

Delphi 中的 PAdES 数字签名

用 PDF Library for Delphi 生成 PAdES B-B、B-T 与 B-LT 签名:时间戳预留空间、DSS 装配,以及在信任一份文件之前先审计 ByteRange

Delphi PDF Library

用 PDFlibPas 实现 PDF 2.0 的页面级关联文件

PDFlibPas 通过 ISO 32000-2 第 14.13 节定义的 /AF 数组把内嵌文件绑定到单个页面,文件本体仍登记在文档级 EmbeddedFiles 名称树里,两种引用共存互不冲突

Delphi PDF Library

Delphi PDF 中的页面拼接与水印模板

用 losLab PDF Library 的 Form XObject 页面捕获与可组合水印模板,在 Delphi 中把 PDF 页面并排拼接,或以矢量保真度叠加到另一页上

Delphi PDF Library

Delphi 中的 PDF/A 与 PDF/UA 预检

用 PDF Library for Delphi 在 Delphi 中跑 PDF/A 与 PDF/UA 预检:结构化的检查项、可比对的报告、保存期修正,以及与 veraPDF 的交叉核验

Delphi PDF Library

用 PDFlibPas 在 Delphi 中产出 PDF/E-1 工程文档

PDF/E-1 拥有独立的 XMP 命名空间,要求完整的生命周期元数据,并封死 BX 兼容性逃逸通道,PDFlibPas 为此在 128 层嵌套、百万对象与 64 MiB 的有界预算内对内容做 preflight

Delphi PDF Library

用PDFlibPas在Delphi中写PDF/VCR-1模板占位符

PDFlibPas 把 PDF/VCR-1 替换模板建成 StructTreeRoot 的一个分支:模板根声明字段集、占位符绑定数据字段,所以保存关卡和 manifest 会遍历每一个顶层分支,而不是只查第一个

Delphi PDF Library

PDF Library for Delphi 性能分析:Delphi 中的哈希索引

剖析 PDF Library for Delphi 在 Delphi 中的 PDF 渲染性能:用哈希索引替代线性字典扫描、用查找表替代逐像素伽马计算,并用构建器消除 O(n²) 字符串拼接,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 渐进式 PDF 范围加载:PDFlibPas 实践

PDFlibPas 如何在 Delphi 中从 HTTP 范围服务器与对象存储打开数 GB 级 PDF 而不下载整个文件:读取回调、按块对齐的缓存、请求合并、可用性探测与迭代式预取调度

Delphi PDF Library

重建损坏的PDF交叉引用表:Delphi恢复扫描

了解 PDF Library for Delphi Delphi PDF Library 如何用单遍 token 扫描器重建损坏的 xref 表,并在扫描时正确忽略字符串、注释与流字节,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

在 Delphi 里把 PDF 转换为同一种色彩空间

RecolorDocument 与 RecolorPage 在 Delphi 与 C++Builder 中把整份或单页 PDF 转入灰度、RGB 或 CMYK 色彩空间,一次性转换颜色算子、位图图像、索引调色板与渐变色标,几何形状、文本与图像位置保持不变仅改变颜色,是送印前归一化色彩空间的合适步骤

Delphi PDF Library

在Delphi中替换PDF页面而不破坏书签

用 PDF Library for Delphi 在 Delphi 中原地替换 PDF 页面,只保留目标页面对象并只搬运视觉相关键,让书签、链接和表单控件都能完整保留,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

使用 CryptoAPI 在 Delphi 中创建自签名测试证书

PLCreateSelfSignedCertificate 只靠 Win32 CryptoAPI 就能生成 RSA/SHA-256 自签名证书,连私钥一起导出成带密码的 PFX;文中讲清 CryptGenKey 的密钥长度标志、CRYPT_EXPORTABLE 和 ProvType 匹配

Delphi PDF Library

Delphi中的SHAKE256 XOF:Keccak域分离

PDFlibPas在同一个Keccak-f[1600]核心上跑SHA-3和SHAKE256,两者只靠pad10*1域字节和rate规则区分,另外提供一个面向Delphi的流式XOF

Delphi PDF Library

诊断 Pascal PDF 库中的静默存根失败

Pascal PDF 库的空替代实现有三种失败形态:抛异常的最好查,返回空数据的代价高,而报告成功的那种最难发现,因为返回码、错误码与异常全部干净;诊断它要靠检查输出产物的字节而不是返回码

Delphi PDF Library

Delphi 中的 Tagged PDF 结构树

用 PDF Library for Delphi 从 Delphi 生成带标签的 PDF:边绘制边建结构树、表头语义、artifact 标记,以及保存前的 PDF/UA 诊断

Delphi PDF Library

Delphi 将 PDF 文本映射回内容流字节

PDF Library for Delphi 将每个提取字符映射回生成它的内容流指令和源字节,让 Delphi 代码可以原地编辑单个字形而不改写整段文本

Delphi PDF Library

Delphi PDF 文本、图像与字体提取

用 PDF Library for Delphi 从 PDF 中提取带位置的文本、原始图像流和字体元数据,并讲清面向搜索与审计作业的各档提取选项

Delphi PDF Library

加固 Pascal PDF 解析器以抵御恶意文件

PDF 解析器本身就是攻击面,了解字体和图像解码器中真实存在的整数溢出、越界写入和无限递归缺陷,以及在 Delphi 中的具体修复方式,适用于 Delphi 和 C++Builder 项目

Delphi PDF Library

Delphi 中的 PDF 矢量图形:路径与渐变

PDF 是一块完整的二维矢量画布,了解 PDF Library for Delphi 如何在 Delphi 中绘制路径、Bezier 曲线和轴向渐变,以及 even-odd 与 nonzero 填充规则的差异

Delphi PDF Library

在 Delphi 中用 PDF 输出中日文竖排文本

PDF Library for Delphi 的 SetVerticalWritingMode 通过竖排模式下的 Type0 字体让日文与中文沿页面自上而下排布,采用字形自带的竖排形态,DrawVerticalText 可在不切换全局书写模式时绘制单段竖排,GetVerticalTextHeight 度量实际形态