PDF文件里到底有什么?

devtools/2025/3/16 6:57:40/

PDF 文档结构由多个组件组成,这些组件决定了文本、图像和其他元素的存储和显示方式。PDF 是一种二进制文件格式,这意味着您无法在文本编辑器中直接编辑 PDF 文件。添加或删除一个字符都可能导致整个文件损坏!

PDF 文件结构

理解 PDF 文档结构对于处理这些文件的开发人员至关重要。PDF 文件内部包含 头部(Header)、主体(Body)、交叉引用表(Cross-Reference Table)和尾部(Trailer)。

头部(Header)

PDF 文件的开头包含以下字节,指示该文件符合哪个版本的 PDF 规范:

%PDF-2.0

主体(Body)

PDF 文件的主体由一系列 PDF 对象 组成,这些对象决定了文件的外观和内容。PDF 文件包含九种对象类型:

    1    布尔(Boolean)对象

    2    数字(Number)对象

    3    浮点(Real)对象

    4    整数(Integer)对象

    5    字符串(String)对象

    6    名称(Name)对象

    7    数组(Array)对象

    8    字典(Dictionary)对象

    9    流(Stream)对象

    10    空(null)对象

这些对象以 树结构 进行组织。/Root(根对象)位于最上层,它包含一个子对象 /Pages,其中存储着文件的页面信息。每个页面都包含一个 /Contents(内容流)对象,该对象包含用于渲染页面的绘图指令。同时,页面还包含 /Resources(资源)字典对象,存储着内容流所需的资源,如图像或颜色设置。在较新的 PDF 版本中,对象可能会被压缩到流中。

 

 交叉引用表(Cross-Reference Table)

交叉引用表列出了 PDF 文件中的所有对象,并以字节偏移量的形式记录它们在文件中的位置。这个表的作用是支持随机访问,从而提高性能。由于可以直接定位到某个对象的位置,因此无需读取整个文件即可显示单个页面。

 

  尾部(Trailer)

PDF 文件通常是从末尾开始读取的,因为文件的尾部(Trailer)位于文件的末端。尾部包含根对象(Root)、一些元数据,以及交叉引用表的字节偏移量。 尾部由 trailer 关键字标记,PDF 文件的结尾必须包含:

%%EOF

文本存储

PDF 文件中的文本存储在 /Contents(内容流)对象中。用于控制文本位置和绘制的常见指令包括 Tj、Tf、TD、Tw 等。了解更多


图像存储

PDF 文件中的图像存储在 XObject(扩展对象)中,它们是特殊的流对象,包含原始的二进制图像数据。这些图像不是以 PNG 或 JPEG 格式存储的,而是以像素数据和颜色空间信息的二进制形式存储。通常,图像数据会使用一种或多种压缩过滤器进行压缩。了解更多

JPedal Inspector

本文使用 JPedal Inspector 创建,该工具可用于PDF 调试和分析 PDF 文件的内部结构。JPedal Inspector 提供如下功能:

    1    COS 树查看器

    2    交叉引用表(XREF)查看器

    3    流调试器(带断点功能)

您可以了解更多关于 JPedal 的信息,或查看本教程以学习如何使用 Inspector。

我们的主页:PDF 转 HTML5、Java 图像库、Java PDF SDK - IDRsolutions

 


http://www.ppmy.cn/devtools/167487.html

相关文章

星型组网模块的两种交互方式优缺点解析

星型组网模块简介 星型组网模块工作在433MHz频段;星型组网模块集主机(协调器)、终端为一体,星型组网模块具有长距离、高速率两种传输模式,一个主机(协调器)支持多达200个节点与其通讯&#xff0…

matlab 三维桥式起重机系统数学模型

1、内容简介 matlab161-三维桥式起重机系统数学模型 可以交流、咨询、答疑 2、内容说明 略 2.3.1 三维桥式起重机系统数学模型 假设:(1)钢丝绳长度变化忽略不计,且不考虑其柔性;(2)假设台车和…

OpenHarmony子系统开发 - ArkCompiler开发指导

OpenHarmony子系统开发 - ArkCompiler开发指导 概述 ArkCompiler是一种统一编程平台,包含编译器、工具链、运行时等关键部件,支持高级语言在多种芯片的编译与运行,并支撑应用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种…

【QT笔记---QText】

文章目录 概要1、字体样式设置1.1效果1.2demo1.3常用成员函数 概要 QText基本应用:1、字体样式设计; 1、字体样式设置 1.1效果 1.2demo //若需要设置字体、字体大小、字宽或者斜体状态的话,可以直接初始化时一起设置 // QFont::QFont(cons…

一些docker命令

一、基础命令 查看 Docker 版本 docker --version 或 docker version:显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info:显示 Docker 系统的详细信息,包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…

探索HTML5 Canvas:创造动态与交互性网页内容的强大工具

探索HTML5 Canvas:创造动态与交互性网页内容的强大工具 引言 在HTML5的众多新特性中,Canvas无疑是最引人注目的元素之一。它为网页设计师和开发者提供了一个通过JavaScript和HTML直接在网页上绘制图形、图像以及进行动画处理的画布。Canvas的灵活性和强…

Spring MVC 全面解析:架构、流程与核心组件(详细)

一、核心架构分层 Spring MVC 以 DispatcherServlet 为中心,协调各组件处理请求: 组件作用DispatcherServlet前端控制器,统一接收请求并分发给处理器(Controller)HandlerMapping映射请求 URL 到具体的处理器&#xf…

晋升系列4:学习方法

每一个成功的人,都是从底层开始打怪,不断的总结经验,一步一步打上来的。在这个过程中需要坚持、总结方法论。 对一件事情长久坚持的人其实比较少,在坚持的人中,不断的总结优化的更少,所以最终达到高级别的…