pdf格式详解

合集下载

PDF的文件结构及格式特点

PDF的文件结构及格式特点

PDF的文件结构及格式特点PDF的文件结构及格式特点2010-04-15 12:50PDF(Portable Document Format)由Adobe公司所开发,是一种不论用何种类型的计算机均可阅读的文件格式。

PDF文件包含一个PDF文档和其它支持数据。

一个PDF文档包含一个或多个页面,每个页面包含与设备和分辨率无关的文字、图形和图像的任意组合,被称为页面描述。

文档还可以包含一些只有在电子读物中才存在的信息,如超文本链接、声音和动画等。

除了PDF文档之外,PDF文件中还包含一些其它信息,如:文件中使用的PDF规范的版本号,文件中重要结构的位置。

为了更好地理解PDF文件,可把PDF文件分解成四个部分。

第一部分是PDF的对象,PDF 的对象是一组基本对象类型。

这些类型绝大部分与Posts cript语言使用的数据类型对应。

PDF支持很多种基本的数据类型:布尔型、数字、字符串、字面名、数组、字典和流,另外还有一种空对象。

在PDF文件中,经常给一些对象赋予一个标签供其它对象调用,这种有标签的对象称为间接对象。

第二部分是PDF的文件结构。

PDF的文件结构决定了对象在PDF文件中的存储方式、访问方式和更新方式。

后面将详细分析。

第三部分是PDF的文档结构。

PDF的文档结构指定了怎样用基本对象类型来表示PDF的文档成分,包括:页面、注解、超文本链接、字体等。

第四部分是PDF的页面描述。

页面描述指的是页面上包含的与设备和分辨率无关的文字、图形和图像的任意组合。

PDF的页面描述可不依赖于PDF的其它部分而被单独地解释。

1、PDF的文件结构PDF的文件结构(即物理结构)包括四个部分:文件头、文件体、交叉引用表和文件尾。

文件头指明了该文件所遵从的PDF规范的版本号。

它出现在PDF文件的第一行。

如%PDF-1.2,表示该文件符合PDF-1.2规范。

文件体由一系列的PDF间接对象(inDirectob Ject)组成。

PDF文件结构详解

PDF文件结构详解

PDF(Portable Document Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字/图象/表单//音乐/视频等).做PDF的解析,首先要熟悉PDF文件的物理结构和逻辑结构。

PDF文件物理结构可分为以下几块: 1.文件头文件头是PDF文件的第一行,格式如下:%PDF-1.4这是个固定格式,表示这个PDF文件遵循的PDF规范版本,目前PDF的生成工具,除了官方的acrobat,其他生成的以1.4版本的居多。

对于做PDF开发来说,一个最简单的原则就是生成PDF的时候尽量符合低版本规范,以保证大多数解析器能支持;解析PDF的时候尽量支持高版本的规范,以保证支持大多数工具生成的PDF文件。

从1.4版本以后,PDF文件的版本并不唯一的只是在这里表示了,可能后面会改写(catalog的Version词条),所以解析PDF的时候,如果这里的版本大于等于1.4,应该再比较一下catalog里面的version,取其中高一点的版本。

2.对象集合这是一个PDF文件最重要的部分,文件中用到的所有对象,包括文本/图象/音乐/视频/字体/超连接/加密信息/文档结构信息等等,都在这里定义。

格式如下:2 0 obj ... end obj一个对象的定义包含4个部分:前面的2是对象序号,其用来唯一标记一个对象;0是生成号,按照PDF规范,如果一个PDF文件被修改,那这个数字是累加的,它和对象序号一起标记是原始对象还是修改后的对象,但是实际开发中,很少有用这种方式修改PDF的,都是重新编排对象号;obj和endobj是对象的定义范围,可以抽象的理解为这就是一个左括号和右括号;省略号部分是PDF规定的任意合法对象(一共8种,见后面附A)。

可以通过R关键字来引用任何一个对象,比如要引用上面的对象,可以使用2 0 R,需要主意的是,R关键字不仅可以引用一个已经定义的对象,还可以引用一个并不存在的对象,而且效果就和引用了一个空对象一样。

PDF文件结构详解

PDF文件结构详解

PDF(Portable Document Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字/图象/表单/链接/音乐/视频等).做PDF的解析,首先要熟悉PDF文件的物理结构和逻辑结构。

PDF文件物理结构可分为以下几块:1.文件头文件头是PDF文件的第一行,格式如下:%PDF-1.4这是个固定格式,表示这个PDF文件遵循的PDF规范版本,目前PDF的生成工具,除了官方的acrobat,其他生成的以1.4版本的居多。

对于做PDF开发来说,一个最简单的原则就是生成PDF的时候尽量符合低版本规范,以保证大多数解析器能支持;解析PDF的时候尽量支持高版本的规范,以保证支持大多数工具生成的PDF文件。

从1.4版本以后,PDF文件的版本并不唯一的只是在这里表示了,可能后面会改写(catalog的Version词条),所以解析PDF的时候,如果这里的版本大于等于1.4,应该再比较一下catalog里面的version,取其中高一点的版本。

2.对象集合这是一个PDF文件最重要的部分,文件中用到的所有对象,包括文本/图象/音乐/视频/字体/超连接/加密信息/文档结构信息等等,都在这里定义。

格式如下:2 0 obj...end obj一个对象的定义包含4个部分:前面的2是对象序号,其用来唯一标记一个对象;0是生成号,按照PDF规范,如果一个PDF文件被修改,那这个数字是累加的,它和对象序号一起标记是原始对象还是修改后的对象,但是实际开发中,很少有用这种方式修改PDF的,都是重新编排对象号;obj和endobj 是对象的定义范围,可以抽象的理解为这就是一个左括号和右括号;省略号部分是PDF规定的任意合法对象(一共8种,见后面附A)。

可以通过R关键字来引用任何一个对象,比如要引用上面的对象,可以使用2 0 R,需要主意的是,R关键字不仅可以引用一个已经定义的对象,还可以引用一个并不存在的对象,而且效果就和引用了一个空对象一样。

pdf格式原理

pdf格式原理

pdf格式原理
PDF格式的原理主要包括以下几个方面:
文本编码:PDF中的文本编码采用Unicode或UTF-8标准,支持多种语言字符。

文本以矢量方式描述,可以保证在不同分辨率下清晰地显示文字。

图像编码:PDF中的图像可以是位图或矢量图。

位图图像以JPEG、PNG等格式嵌入到文件中,而矢量图则以矢量方式描述,可以通过软件进行编辑。

页面描述:PDF文件由一系列页面组成,每个页面包含文本、图像等元素。

页面描述语言采用PDF对象模型,可以描述页面的布局、元素的位置和属性等。

交互元素:PDF文件支持添加交互元素,如超链接、按钮、表单等。

这些元素可以触发特定的动作或事件,如跳转到网页、提交表单等。

安全性:PDF文件可以设置密码、权限等安全措施,以保护文件的内容和元数据。

还可以对文件进行数字签名,以确保文件的完整性和来源可靠性。

总的来说,PDF格式的原理主要涉及文本编码、图像编码、页面描述、交互元素和安全性等方面。

这些原理使得PDF文件具有良好的可读性、可打印性和安全性,成为一种广泛应用的电子文档格式。

pdf 格式 详解

pdf 格式 详解

pdf格式详解
PDF格式是Adobe公司开发的一种电子文档格式,它是目前使用最广泛的电子文档格式之一。

PDF格式具有以下特点:
1.可移植性:PDF格式文件可以在任何支持PDF的设备上打开和阅读,包括计
算机、平板电脑和智能手机。

2.安全性:PDF格式文件可以进行加密,防止未经授权的用户访问。

3.可控性:PDF格式文件可以设置各种属性,例如页面布局、字体、颜色等。

PDF格式文件由以下几个部分组成:
●Header:PDF文件的头部,包含了文件的版本、字符集、安全设置等信息。

●Body:PDF文件的内容部分,包含了文本、图像、表格等元素。

●Cross-reference table:PDF文件的索引表,用于快速定位文件中的某个位置。

●Trailer:PDF文件的尾部,包含了文件的总页数、字体表等信息。

PDF格式文件可以使用Adobe Acrobat或其他PDF阅读器打开和阅读。

Adobe Acrobat还提供了丰富的功能,可以用于创建、编辑、转换和保护PDF文件。

PDF格式文件具有广泛的应用范围,包括:
●电子出版物:PDF格式文件可以用于创建电子书、杂志、报纸等电子出版物。

●文档交换:PDF格式文件可以用于交换文档,例如合同、报告、演示文稿等。

●电子商务:PDF格式文件可以用于电子商务,例如商品说明书、发票、订单
等。

PDF格式文件是现代办公和学习中不可或缺的工具。

PDF文件结构详解

PDF文件结构详解

PDF(Portable Document Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字/图象/表单/链接/音乐/视频等).做PDF的解析,首先要熟悉PDF文件的物理结构和逻辑结构。

PDF文件物理结构可分为以下几块:1.文件头文件头是PDF文件的第一行,格式如下:%这是个固定格式,表示这个PDF文件遵循的PDF规范版本,目前PDF的生成工具,除了官方的acrobat,其他生成的以版本的居多。

对于做PDF开发来说,一个最简单的原则就是生成PDF的时候尽量符合低版本规范,以保证大多数解析器能支持;解析PDF的时候尽量支持高版本的规范,以保证支持大多数工具生成的PDF文件。

从版本以后,PDF文件的版本并不唯一的只是在这里表示了,可能后面会改写(catalog 的Version词条),所以解析PDF的时候,如果这里的版本大于等于,应该再比较一下catalog 里面的version,取其中高一点的版本。

2.对象集合这是一个PDF文件最重要的部分,文件中用到的所有对象,包括文本/图象/音乐/视频/字体/超连接/加密信息/文档结构信息等等,都在这里定义。

格式如下:2 0 obj...end obj一个对象的定义包含4个部分:前面的2是对象序号,其用来唯一标记一个对象;0是生成号,按照PDF规范,如果一个PDF文件被修改,那这个数字是累加的,它和对象序号一起标记是原始对象还是修改后的对象,但是实际开发中,很少有用这种方式修改PDF的,都是重新编排对象号;obj和endobj 是对象的定义范围,可以抽象的理解为这就是一个左括号和右括号;省略号部分是PDF规定的任意合法对象(一共8种,见后面附A)。

可以通过R关键字来引用任何一个对象,比如要引用上面的对象,可以使用2 0 R,需要主意的是,R关键字不仅可以引用一个已经定义的对象,还可以引用一个并不存在的对象,而且效果就和引用了一个空对象一样。

pdf文件格式详解

pdf文件格式详解

pdf文件格式详解
PDF(Portable Document Format)是一种用于电子文档交换和展示的文件格式。

以下是关于PDF文件格式的详细解释:
1.跨平台性:PDF格式可以在不同的操作系统上进行创建、查看和编辑,无论Windows、Mac还是Linux,用户都可以使用相应的软件轻松处理PDF文件。

2.保真性:PDF格式可以精确地保留文档的原始格式和布局,包括字体、图像、表格等。

这意味着无论在哪种设备上查看PDF文件,其内容和样式都将完美呈现。

3.可编辑性:虽然PDF文件被设计为不可编辑,但使用专业的PDF编辑器,用户可以对PDF文件进行修改、添加注释、旋转页面等操作。

4.安全性:PDF格式支持加密和密码保护,可以限制对文件的访问权限,防止信息泄露。

5.文件压缩:PDF格式支持多种压缩算法,可以减小文件大小,方便存储和共享。

此外,PDF文件主要由四部分组成,分别是文件头、文件内容、交叉引用表和文件尾。

文件头表示该pdf文件遵循的pdf文件版本;文件内容实际存储文件内容的部分,按obj对象进行存储;交叉引用表记录每个obj在整个文件中的位置,通过偏移量进行定位;文件尾存储了最关键的文件meta信息,包括交叉引用表在整个文件重的偏移位置、文档的根对象的编号和文档中具备的对象的个数等。

总的来说,PDF是一种非常实用和重要的文件格式,可以方便地创建、查看、编辑和共享各种类型的文档。

无论是个人用户还是企业机构,都可以受益于PDF格式的优点和特性。

pdf 格式详解

pdf 格式详解

PDF(Portable Document Format,可移植文档格式)是一种适用于印刷和在线使用的页面PDF(Portable Document Format,可移植文档格式)是一种适用于印刷和在线使用的页面描述语言,最初由Adobe公司开发,目的是创建一个与平台无关的文档交换方法。

这种格式的文件可以跨平台展示,无论是Windows、Mac还是Linux都可以无障碍打开,显示效果一致。

要深入理解PDF格式,可以从以下四个方面进行探索:
1. Objects(对象):这一部分涵盖了PDF文件中的各种元素,如文本、图像、图形等。

2. File structure(物理文件结构):这部分涉及到PDF文件本身的组织结构,包括文件头、文件体等组成部分。

3. Document structure(逻辑文件结构):这一部分描述了PDF文件中的逻辑结构,例如书签、目录等。

4. Content streams(内容流):内容流涉及如何渲染PDF页面上的元素,例如文本、图像等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

pdf(Portable Document Format, 便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字\图象\音乐\视频).今天先讲一下pdf的文件(物理)结构PDF文件结构可分为以下几块:1.header:pdf文件的第一行,格式如下:%PDF-1.3表示当前文件的版本是1.3(目前最高版本为1.5)2.body:pdf文件中用到的所有对象,包括文本\图象\音乐\视频\字体\超连接\加密信息等等,格式如下:2 0 obj...end obj其中省略号部分是pdf规定的任意合法对象(一共8种)3.cross reference table:所有pdf对象的引用表,其格式如下:xref0 50000000000 65535 f0000000009 00000 n0000000074 00000 n0000000120 00000 n0000000179 00000 n其中,xref是开始标志,表示以下为引用表内容;0 5表示从对象号为0的开始,连续有5个对象(0,1,2,3,4),分别用5行来表示.每行的前10个数字代表这个这个对象相对文件头的偏移地址,后面5个数字只有当这个对象被删除的时候才有用,表示这个对象被删除后又被重新生成后的对象号最后一位f或n表示对象是否被使用(n表示使用,f表示被删除或没有用)4.trailer:整个pdf文件的入口点,形式如下:trailer<</Size 8/Root 1 0 R>>startxref553%%EOF/size :这个pdf中总共使用了多少个对象/root :这个pdf文件的catalog对象的对象号,这是pdf中最顶层的对象/startxref: 后面的数字表示cross reference table的开始位置/%%EOF :文件结束符.实际一个pdf文件是很复杂的,但是上面几个部分是确定的,只能多不能少.下一讲我说一下pdf里面8种类型.1.booleam用关键字true或false表示,可以是array对象的一个元素,或dictionary对象的一个条目.2.numeric包括整形和实型,不支持非十进制数字,不支持指数形式的数字.例:1)整数123 4567 +111 -2范围:正2的31次方-1到负的2的31次方2)实数12.3 0.8 +6.3 -4.01 -3. +.03范围:±3.403 × 10的38次方±1.175 × 10的-38次方注意:如果整数超过表示范围将转化成实数,如果实数超过范围就出错了3.string由一系列0-255之间的字节组成,一个string总长度不能超过65535.string有以下两种方式: 1)由()包含起来的一个字串,中间可以使用转义符"\".例:(abc) 表示abc(a\\) 表示a\2)由<>包含起来的一个16进制串,两位表示一个字符,不足两位用0补齐例:<Aabb> 表示AA和BB两个字符<AAB> 表示AA和B0两个字符由一个前导/和后面一系列字符组成,最大长度为127.和string不同的是,name是不可分割的和唯一的,不可分割就是说一个name对象就是一个原子,比如/name,不能说n就是这个name 的一个元素;唯一就是指两个相同的name一定代表同一个对象.从pdf1.2开始,除了ascii的0,别的都可以用一个#加两个十六进制的数字表示.例:/name 表示name/name#20is 表示name is/name#200 表示name 05.array用[]包含的一组对象,可以是任何pdf对象(包括array).虽然pdf只支持一维array,但可以通过array的嵌套实现任意维数的array(但是一个array的元素不能超过8191)例:[549 3.14 false (Ralph) /SomeName]6.Dictionary用"<<"和">>"包含的若干组条目,每组条目都由key和value组成,其中key必须是name对象,并且一个dictionary内的key是唯一的;value可以是任何pdf的合法对象(包括dictionary对象). 例:<< /IntegerItem 12/StringItem (a string)/Subdictionary << /Item1 0.4/Item2 true/LastItem (not!)/VeryLastItem (OK)>>>>7.stream由关键字stream和endstream包含一系列字节.内容和string很相似,但有区别:stream可以分几次读取,分开使用不同的部分,string必须作为一个整体一次全部读取使用;string有长度限制,但stream却没有这个限制.一般较大的数据都用stream表示.例:(略)8.NULL用null表示,代表空.如果一个key的值为null,则这个key可以被忽略;如果引用一个不存在的object则等价于引用一个空对象.例:(略)给大家说点有用的东西:为什么有的pdf不允许打印?pdf有自己的加密措施,其中就有限制打印.找到trailer,如果这个pdf是加密的话会有一个/Encrypt的name,他的值一般形式是n 0 R,表示这个pdf文件的加密信息在n 0这个obj里面记录.找到这个obj,其下有一个/P的name,他的值是一个数字(32位)其中第三位代表是否有打印权限:)由于pdf的特殊文件结构,注定pdf的生成是一件很麻烦的事情。

目前最常用的就是adobe 公司提供的sdk了,但是由于其依赖与adobe的环境,所以使用起来不是很方便。

在这里我给大家介绍另外一种方法——使用pdflib生成pdf。

pdflib也提供了一组sdk,但和adobe的sdk相比,pdflib很小,但功能却一点也不弱。

所以对于开发者来说,pdflib是一个明智的选择。

你可以从下面的网址得到到它:/products/pdflib/download/index.html。

如果你没有得到序列号,那么生成的pdf将会加上水印,其他功能和商业版一样。

另外你还可以从下面网址得到pdflib-lite版:/products/pdflib/download-source.htmlpdflib-lite使用协议:/purchase/license-lite.html和pdflib相比,pdflib-lite最大的特点就是你可以拥有完全的源代码,但功能不如pdflib 全面,比如支持的字体要比pdflib少很多。

但是,如果你对pdf文件本身很了解的话,你完全可以在pdflib-lite的基础上再做发挥,这就要看你的c语言功底如何了。

如果要用做商业产品,请仔细阅读授权协议!下载pdflib压缩包(大约6m)后,在pdflib文件夹下有pdflib.dll,pdflib.lib,pdflib.h,pdflib.reg。

对于我们来说,只要有前3个文件就可以了。

下面是一个生成pdf的完整代码:#include <stdio.h>#include <stdlib.h>#include "pdflib.h"intmain(void){PDF *p;int font;/* create a new PDFlib object */if ((p = PDF_new()) == (PDF *) 0){printf("Couldn't create PDFlib object (out of memory)!\n");return(2);}PDF_TRY(p) {if (PDF_begin_document(p, "hello.pdf", 0, "") == -1) {printf("Error: %s\n", PDF_get_errmsg(p));return(2);}/* This line is required to avoid problems on Japanese systemsPDF_set_parameter(p, "hypertextencoding", "host");PDF_set_info(p, "Creator", "hello.c");PDF_set_info(p, "Author", "Thomas Merz");PDF_set_info(p, "Title", "Hello, world (C)!");PDF_begin_page_ext(p, a4_width, a4_height, "");/* Change "host" encoding to "winansi" or whatever you need! */font = PDF_load_font(p, "Helvetica-Bold", 0, "host", "");PDF_setfont(p, font, 24);PDF_set_text_pos(p, 50, 700);PDF_show(p, "Hello, world!");PDF_continue_text(p, "(says C)");PDF_end_page_ext(p, "");PDF_end_document(p, "");}PDF_CA TCH(p) {printf("PDFlib exception occurred in hello sample:\n");printf("[%d] %s: %s\n",PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));PDF_delete(p);return(2);}PDF_delete(p);return 0;}到现在,一个hello.pdf的pdf文件就生成了,你完全可以自己发挥,做出很复杂的pdf文件,这就看你的想象力了:)不过在发挥的时候要注意,pdf的坐标和我们通常理解的坐标是不一样的,屏幕坐标的原点在左上角,pdf文件的原点在左下脚。

相关文档
最新文档