PDF文件里到底有什么?

news/2025/3/15 6:13:42/

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/news/1579244.html

相关文章

【MyBatis Plus 逻辑删除详解】

文章目录 MyBatis Plus 逻辑删除详解前言什么是逻辑删除?MyBatis Plus 中的逻辑删除1. 添加逻辑删除字段2. 实体类的配置3. 配置 MyBatis Plus4. 使用逻辑删除5. 查询逻辑删除的记录 MyBatis Plus 逻辑删除详解 前言 MyBatis Plus 是一个强大的持久化框架&#xf…

现代密码学 | 具有完整性功能的安全方案

1.案例背景 1.1邮箱遭黑客入侵,一公司差点损失1500万 事件描述: 近日,杭州钱塘区公安分局前进派出所接辖区某公司报案称,公司邮箱遭黑客非法入侵恶意篡改信息,其国外客户被欺骗后,将650余万元&#xff08…

使用vite脚手架搭建react项目

首选使用npm安装react vite npm install -g create vite 替换npm install -g create-react-app 新的脚手架据说很快,是原来的webpack的700倍。。。 安装完vite后,使用npm create vite my-react-app (my-react-app 这是我自己的项目名,你自己可…

Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策

一、Manus与DeepSeek差异 十分好奇DeepSeek和Manus究竟谁更厉害些,DeepSeek是知识型大脑,Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力,例如撰写论文、润…

css的显示模式

CSS的显示模式: html中一共有三种显示模式 1. 块级元素:独占一行,默认宽度为父元素的100%,可以设置宽高 例如div,p,ul,ol,li,h1-h6 2、行内元素:不独占一行,默认宽度为内容的宽度,不能设置宽高 例如span,a…

【Python办公自动化】—Excel中相同编号自动添加-1-2-3...

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 &…

python如何获取三个小时之前的时间并输出

python获取三个小时之前的时间的方法: 1、使用“import datetime”导入datetime包 2、用“now()”函数得到的当前时间减去三个小时,输出这个结果就可以了 执行结果如下:

绿色高效运维:分布式光伏监控系统的全生命周期管理

一 碳中和分布式光伏监控系统-概述 碳中和分布式光伏监控系统是针对分散式光伏发电单元(如屋顶光伏、工商业光伏、村级电站等)进行集中化、智能化管理的技术平台,其核心目标是通过实时监测、数据分析与远程控制,实现发电效率大化…