在 Delphi 中使用 PDFium Component 读取 PDF 字体属性
在 Delphi 中使用 PDFium Component 检查 PDF 内部的字体:读取字形的家族名称、基本名称、字重、斜体角度,以及字体是否嵌入。 PDF 中的每个可见字符都带有对绘制它的字体的引用,而 PDFium Component 允许您沿着该引用追溯到字体对象并读取它所知道的内容
losLab 软件开发博客
Software Development Blog
在 Delphi 中使用 PDFium Component 检查 PDF 内部的字体:读取字形的家族名称、基本名称、字重、斜体角度,以及字体是否嵌入。 PDF 中的每个可见字符都带有对绘制它的字体的引用,而 PDFium Component 允许您沿着该引用追溯到字体对象并读取它所知道的内容
在信任 PDF 之前先枚举其风险面。本文介绍 PDFium Component 如何在 Delphi 中读取文档 JavaScript、启动操作、URI、嵌入文件、XFA 与签名 MDP 权限,生成只读审计报告而不执行文档中的动作,适合上传文件检查、合规预检和安全隔离工作流使用
在 Delphi 里拿 PDFium 组件攒个正经的 PDF 查看器:把 TPdf 跟 TPdfView 穿上一条裤子,搞定文档加载和渲染,再加上翻页、缩放和各种适应模式的门道。 在 Delphi 里搞个 PDF 查看器,说白了就是摆上俩组件,再把它俩拿线连起来的事儿。 攥着文档的大权:开文件、解密全归它管,别人要是问
一份实用的 Delphi 代码配方,教你如何用 PDFium 组件把满满一文件夹的扫描图片揉成一个 PDF:建文档、一图一页、缩放自适应、最后存盘,一套带走。 有个理赔团队正对着一台自动馈纸式扫描仪发愁,这破机器把他们积压了三十年的纸质档案一通猛扫,直接在文件夹里吐出了一大堆按着 、 这样往下排的单页 JPEG 图片
在 Delphi 中使用 PDFium 组件把 PDF 页面给光栅化成 JPEG:把 DPI 换算成像素尺寸,把每一页都渲染成位图,最后用选好的画质交给 TJPEGImage 去压缩编码。 把一页 PDF 渲染成 JPEG,其实就是两步,先把页面按你选定的分辨率光栅化成位图,再把位图交给 JPEG 编码器并选定画质
在 Delphi 中使用 PDFium 组件凭空捏出一个 PDF:掌握 CreateDocument、AddPage、AddText 和 CreatePath,外加那些绝对会咬人的坐标系和字体嵌入暗坑。 PDFium 满江湖的声名都是靠着当“阅读引擎”打下的,它是 Chrome 那个 PDF 标签页背后的无名英雄
在 Delphi 中使用 PDFium 创建高亮和下划线注释:QuadPoints 顺序、为什么 FPDFAnnot_SetAttachmentPoints 返回 false,以及 Append 修复 PDFium Component 通过 创建文本标记注释,包括高亮、下划线、删除线和波浪线:您在 记录上设置
诊断 Delphi 中 pdfium.dll 的加载失败:修复 32/64 位 ERROR_BAD_EXE_FORMAT 193 错误,识别过时的 DLL,并在线程间安全加载 PDFium 组件 当 pdfium.dll 拒绝在客户机器上加载时,适用于 Delphi 和 Lazarus 的 PDFium
在 Delphi 中检测 XFA 表单并使用 PDFium 组件提取 template、datasets 和 config 数据包为原始 XML:静态包读取无需 V8 运行时 是的——PDFium 支持 XFA 表单,但有一个重要的划分。PDFium 组件可以检测 XFA 表单并使用标准 DLL 将其 、 和
在 Delphi 中使用 PDFium 组件导入和导出 XFDF 表单数据和批注:ISO 19444-1 往返处理、18 种批注子类型以及区域设置安全的数字 适用于 Delphi 和 Lazarus 的 PDFium 组件通过 XFDF(由 ISO 19444-1 定义的 XML 交换格式)交换表单数据和批注;
在 Delphi 中使用 PDFium 组件从 PDF 中抠出嵌在里头的图片:摸清 BitmapCount,挨个把 Bitmap[] 给薅出来,防住那个装聋作哑的报错坑,最后把图给存成 JPEG 或 BMP。 PDF 会把图像当作内容流里的一级对象来存放。页面引用照片、扫描件或图表时,像素数据会和页面几何信息一起放在
在 Delphi 中使用 PDFium 组件提取 PDF 文本:通过 Character[] 进行原始字形访问、通过 ReadablePageContent 提取段落结构,以及 Active 静默失败防护。 PDF 文本提取看起来很简单,直到您遇到一个文本层缺失、损坏或被拆分为几十个没有意义顺序的微小字符运行的文档;P
Pascal 封装 C 库时,调用约定、整数宽度、异常边界和句柄所有权都必须明确。本文梳理 PDFium Component 绑定中的 cdecl、FPC Win64 size_t、异常传播、双重释放、托管记录和 DLL 导出清理问题,并说明修复方法,帮助 Delphi 与 Lazarus 集成避免崩溃
在 Delphi 和 Lazarus 中使用 PDFium 组件读取 PDF 签名:检查 SubFilter、ByteRange 和 CMS,并检测 PAdES B-B 到 B-LTA 基线级别 您收到了一份已签名的 PDF,并且需要在查看器中显示是谁签的名、何时签的名、签名是否覆盖了整个文件,以及它在长期合规方面达到
在 Delphi 中使用 PDFium 组件添加长期 PAdES 签名:RFC 3161 时间戳、DSS 验证存储和用于 B-T、B-LT 和 B-LTA 的 DocTimeStamps 为了使已签名的 PDF 在数年后(在签名证书过期且其 CA 轮换后)仍能进行验证,PDFium 组件可以在 Windows
在 Delphi 中使用 PDFium 组件合并 PDF:搞懂 ImportPages、页码范围字符串、插队位置,对付装死烂文件,还有搞清表单字段到底能不能一起合过去。 用 PDFium 组件去合并 PDF,大门只有一扇: 。不管你要怎么合,套路永远是那老一套:先造个空荡荡的接收文档(destination),挨个去开
使用 PDFium 在 Delphi 中把多个页面拼到一张纸上、原位重新排序,或按索引导入页面子集。本文解释 ImportNPagesToOne、MovePages 和 ImportPagesByIndex 的尺寸单位、索引语义、返回句柄和释放责任,避免泄漏与双重释放,适合打印排版、页面编辑器和文档抽取工具
为什么子字符串键查找会损坏 Delphi 中的 PDF 字典解析:遵循 ISO 32000-1 的完整名称 Token 匹配以及针对恶意 PDF 的资源上限限制 子字符串搜索(例如 )是读取 PDF 字典的错误工具,因为 PDF 名称键共享前缀: 是 的前缀,而 是 的前缀;ISO 32000-1 §7.3.5
面向 Delphi/C++Builder 的 PDFium Component 无障碍 PDF 阅读器设计实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium
面向 Delphi/C++Builder 的 PDFium Component 注释审阅界面实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL
耗时的 PDF 渲染应当置于 UI 线程之外。看看 PDFium 绑定如何利用 Delphi 中可取消的 futures 在后台线程上运行任务 在 PDFium 中渲染页面是同步的。你调用该库,它光栅化到位图中,当像素写入完成后控制权返回。对于单一屏幕尺寸、单一缩放级别的页面,这只需几毫秒,没人会注意到
耗时的页面渲染不应冻结 UI 或运行到结束。本文说明 PDFium 在 Delphi 中如何通过 IFSDK_PAUSE 实现可取消的渐进式渲染 大多数 PDF 页面在几毫秒内就能光栅化,通常不会引起关注,但当用户打开一张 A1 的工程图纸、一个包含数万个向量笔触的页面,或一个挤满透明度组与柔和蒙版的海报时,单次绘制调
在PDFium Component中,当/V是从控件批注上读取时,复选框会展平成未勾选状态,因为按ISO 32000-1规定/V属于父字段字典
Delphi 和 FPC/Lazarus 之间针对相同 PDFium 代码的四个隐秘差距:记录临时生命周期、范围检查、E2010 TBytes 类型转换以及 AnsiString 字节丢失 相同的 Object Pascal 源码在 Delphi 和 FPC/Lazarus 下的四个行为差异,反复困扰着 PDFium
FPDFText_GetUnicode 返回完整的 32 位代码点,而 WideChar 只能容纳 16 位,因此 Delphi 中的 PDFium Component 可能损坏 Emoji 和罕见 CJK 表意文字
PDFium Component 在 Delphi 中遇到加密 PDF 时会拒绝不安全的增量更新、合规标记注入和 PAdES 签名操作
PDFiumPas 通过解析活动交叉引用修订链和 Adobe Extension Level 声明,在 Delphi 中按 1.3 至 1.7 的精确版本保存 PDF 并验证内容一致性
WaitForIdle和padSynchronize回复如何让PDFium Component中的Delphi主线程死锁,以及队列容量、关闭顺序与TPdf所有权的限制
Delphi 或 FPC 函数返回含托管字段的记录时,使用 FillChar 清零 Result 会跳过字符串释放并在循环调用中造成内存泄漏
面向 Delphi/C++Builder 的 PDFium Component 表单字段导航和查看器端验证实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium
Delphi 与 FPC PDF 查看器中的三层打印循环在点击 Cancel 后仍继续渲染,因为 Free Pascal 会在循环开始时锁定 for 循环上限
面向 Delphi/C++Builder 的 PDFium Component Lazarus 和 Free Pascal 查看器集成实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在
面向 Delphi/C++Builder 的 PDFium Component 低视力颜色滤镜和阅读模式实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium
PDF行向量约定如何让Delphi中的Multiply变成后乘、PreMultiply变成前乘,为什么PreTranslate需要用到线性部分,以及轴心辅助函数如何组合
了解为什么仅执行 FlateDecode 仍会让 PDF 对象流保持差分数据,以及 PDFiumPas 如何在 Delphi 中还原 PNG 和 TIFF Predictor
面向 Delphi/C++Builder 的 PDFium Component PDF 接收和审阅工作台实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium
在 Delphi 中使用 PDFium Component 产生通过 veraPDF 验证的 PDF/A 归档档:SaveAsPdfA、XMP 与 ICC OutputIntent 注入、a/b/u 一致性,以及其中的陷阱。 你释出了一个会将每个文件标記为 PDF/A-1b 的转换器,客戶的紀录系統将它们摄取
使用 PDFium 元件 (PDFium Component) 在 Delphi 中建置 PDF/A 预检检查器:透过标記扫描 (token-scan) 29 個验证問题、感知各部分的门檻 (part-aware gating)、对象流 (object streams),且无需進行完整的内容解析
使用 PDFium VCL 走訪即时的 PDF 标签树,以捕捉字节等級 (byte-level) 扫描遗漏的 PDF/UA 内容错误:图形替代文字 (Figure Alt)、公式文字 (Formula text) 以及独一无二的注释識別码 (Note IDs)。 你的预检报告指出文件符合 PDF/UA 标準
在 Delphi 中使用 PDFium VCL 产生并验证 PDF/VT-1 可变数据打印文件:DPart 树状結构、強制性的 PDF/X-4 配对以及 ISO 16612-2 的陷阱。 一家交易列印廠 (transactional print shop) 退回了你 80,000
利用 PDFium 组件在 Delphi 中自动化 PDF/A 与 PDF/UA 印前检查:包括批处理循环、退出代码、JSON 与 HTML 报告,以及为何空发现项并不代表通过 批量印前检查工具是一个没有窗口的控制台程序,它指向一个包含诸多 PDF 文件的文件夹,针对你指定的合规标准验证每一个文件,并留下关于它所发现内
面向 Delphi/C++Builder 的 PDFium Component 渲染缓存和缩放性能实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL
PDFiumPas 的渲染锁可防止并发 UnloadPage 或 ReloadPage 影响光栅化,但直到 v2.26.0,六个 TPdf 和 TPdfView 调用仍未使用它
面向 Delphi/C++Builder 的 PDFium Component 安全 PDF 预览界面实战指南,覆盖架构决策、验证证据、诊断、边界情况和上线检查 在 Delphi 和 C++Builder 应用中嵌入 PDFium Component 工作流,或在 Lazarus/FPC 中嵌入 PDFium LCL
在绘制前必须先获取字符串宽度。本文说明 PDFium 绑定如何在不写入页面的情况下测量文本,用于 Delphi 中的自动换行 绘制一段文本的调用本身很直接:你给 传入字符串、字体、字号和位置,字形就会出现。但它不会告诉你绘制后这段字符串会有多宽,也不会自动在边界处断行。一次 总是把文本放在一个位置
PDFiumPas 在 Delphi 中缓存 FPDF_TEXTPAGE 句柄,AddText、SetText 或 AddPath 编辑后若不先重新加载,下一次文本查询就会读取旧缓存
使用 PDFium 修复 Delphi 中缩略图重复旋转和适配缩放错误,了解渲染旋转参数为何会叠加,以及 90 或 270 度页面为何必须交换宽高后再计算缩略图比例和视图尺寸
PDFium Component如何在Delphi中把表单字段索引与批注索引区分开:按子类型过滤控件、只在原生调用边界做映射,并修复无界面模式下的表单焦点问题
在 Delphi 中使用 PDFium 词框同步文本转语音和页面上的词语高亮显示:TrackReadingWordAt、渲染顺序、自动滚动以及 Unicode 陷阱 朗读功能除了发出声音外,还有一项可见的任务:当每个词被读出时,必须在页面上点亮该词并使其保持在视图中。为了做到这一点,您需要每个词的边界框,并索引到语音引
PDFium Component 只把 XFA 字段编辑写入内存缓冲区,因此 Delphi 应用保存后会丢失字段值;AcroForm 可以持久化,而 XFA 不行
在 Delphi 中使用 PDFium 组件打印 PDF:用 RenderPage 和 rePrinting 渲染页面,靠 StretchDIBits 把位图喂给 TPrinter,还要搞定缩放自适应和旋转。 PDF 的坐标是用磅(points)来量的,而打印机的坐标走的是设备单位,这俩家生来就老死不相往来,除非你亲自
先绘制一次水印或徽标,再在每一页复用。本文说明 PDFium 的 Form XObject 如何在 Delphi 中实现可复用页面印章,以及句柄生命周期规则 在文档每一页上盖水印或徽标,看起来像是五分钟就能做完的事,直到你用文件体积分析器打开结果才会看见代价。最直接的做法是逐页遍历,然后在每一页上重新构建相同的文本或图
在 Delphi 中使用 PDFium 组件运行 AcroForm JavaScript:为什么字段计算保持静默、V8 DLL 要求,以及否决高风险 PDF 操作的宿主事件 在 Acrobat 中重新计算总和,但在您自有的 Delphi 查看器中保持冻结的表单,几乎绝不是渲染 bug;除非宿主连接了 JS 平台,否则
在 Delphi 中使用 PDFium 组件为 PDF 添加 PAdES B-B 数字签名:支持自建 SHA-256、CMS 以及用于字节级签名的 Windows CNG 后端 PDFium 组件通过其 方法使用 PAdES B-B 数字签名签署 PDF:它加载文档、对签署的字节范围进行哈希处理、构建 CAdES
如何在 Delphi 中使用 PDFium 组件按页码、范围或书签拆分 PDF:TPdf.ImportPages、CreateDocument、SaveAs 返回值校验,以及 Active 标志重置 PDFium 组件拆分 PDF 时提供了一个方法 。无论你要抽取单页、按任意边界切分,还是按文档书签结构分段,核心都在于
超大 PDF 无需一次性加载。查看 TStream 适配器如何为 PDFium 提供按需 FPDF_FILEACCESS 回调,以及 Delphi 中如何处理 4 GiB 限制 一个扫描件存档可能会有数十 GB 大小,打开这种 PDF 时,阅读器通常只需要显示一页,例如目录页或书签跳转后的目标页
在 Delphi 中使用 PDFium 组件构建并排 PDF 查看器:支持两列或三列独立面板,TPdfView.Zoom 分别控制缩放,并支持页面导航同步 两份文档可同时打开并保持同一页码,每份文档显示在各自可滚动的面板里,这就是并排对比查看器的核心。PDFium 组件通过一个非常直接的对象模型提供这条能力:
现代 PDF 将结构放在压缩对象流与 xref 流中,本文说明 Delphi 校验器如何展开 ObjStm 并读取 PDFium 的 xref 流 trailer 你编写了一个小型校验器。它打开 PDF 后定位文件结尾,找到 ,读取偏移量,并期望在该位置发现 关键字,紧跟一张固定宽度交叉引用表
在 Delphi 中验证可印刷的 PDF/X 文件:PDFium Component 的 ValidatePdfX 运行针对 TrimBox、Trapped、OPI、LZW 以及字体嵌入的 ISO 15930 检查 适用于 Delphi 的 PDFium Component 通过 验证适合印刷的 PDF/X
为什么 PDF 验证器拒绝 PAdES 签名:全零 ByteRange 字段、缺失的 D: 日期前缀,以及增量更新后丢失的 /Encrypt,使用 PDFium 组件进行解析 在我们使用 Delphi 中的 PDFium 组件进行调试的几乎所有案例中,验证器拒绝 PAdES 签名的原因都不外乎以下三个之一:
PDFium 组件在 Delphi 中如何处理 PDF 文件附件:AttachmentCount、Attachment、CreateAttachment、DeleteAttachment、路径清理以及就地保存。 PDF 文件附件存储在文档的嵌入文件树中,这是一种大多数查看器都作为曲别针面板或附件侧边栏呈现出来的结构;从