losLab 软件开发博客

PDF Structure

Software Development Blog

PDF Structure

手写极简 PDF:你需要的五个对象

在文本编辑器中手写一个能正常打开的 PDF:Catalog、Pages、Page、内容流和字体对象,以及把它们绑定在一起的头部、交叉引用表和尾部,适用于 Delphi 和 C++Builder 项目

PDF Structure

没有 Pages 字典的 PDF:解析的影响

ISO 32000 要求每个 PDF Catalog 都有一个 /Pages 条目。如果没有它,解析器会崩溃或计算出零页;恢复意味着扫描每个对象的 /Type /Page。 PDF Catalog 字典只有一个必需的导航键: 。该键必须指向一个 类型的间接对象,该对象又包含 数组和页面的总

PDF Structure

PDF 逻辑对象模型:类型、引用与结构

了解 PDF 规范如何用八种基础对象类型、间接对象与引用机制,以及从文档目录到页面树再到单页的逻辑层级结构,共同构建出一份完整的 PDF 电子文档,这正是每个解析器实现依赖的基础模型

PDF Structure

PDF 元数据、大纲书签与注解结构详解

PDF 如何存储它的元数据与导航层:XMP 包与 Info 字典之间的分工、书签面板背后的大纲树、目标位置的语法,以及每一页上的注解数组与常见断链

PDF Structure

PDF 线性化和快速 Web 视图:它是如何工作的

了解 PDF 线性化(快速 Web 视图)如何让文件在完全加载前就显示第一页,涉及线性化字典、提示流,以及后续编辑为何会破坏这种效果,适用于 Delphi 和 C++Builder 项目

PDF Structure

PDF 字体与文本:为什么字形会变成方块

为什么 PDF 文本在别的机器上会变成方块或乱码?本文为开发者详解 Type1、TrueType 和 Type0 CID 字体的编码、嵌入与子集化机制,适用于 Delphi 和 C++Builder 项目

PDF Structure

PDF 页面顺序:页面树如何决定页序

PDF 页面顺序由 /Pages 树决定,而不是对象编号,了解 Kids 数组、分层子树以及属性继承机制在 ISO 32000 规范中的具体作用,适用于 Delphi 和 C++Builder 项目

PDF Structure

PDF 页面树形态:分支因子、扁平化和 /Count 可信性

为什么 PDF 写入器会使用平衡页面树,工具扁平化会带来什么影响,以及过期或错误的 /Count 值如何影响严格和宽松解析器 在相关说明 PDF 页面顺序 中,我们已经确认:显示顺序来自 树中各 数组的深度优先左到右遍历,而不是对象号。本文从树的形态来讲另一个问题:成熟的生成器为什么不是所有页面都放在根一层,为什么会发

PDF Structure

PDF 文件结构:该格式实际是如何运作的

PDF 本质上是一组通过交叉引用表定位的编号对象集合,这一底层模型直接决定了字体嵌入、数字签名字节范围以及增量更新等核心机制的具体实现方式,也是理解 PDF 内部结构的重要关键切入点