PDF 解析

 主页   资讯   文章   代码   电子书 

第1章 - 介绍

可移植文档格式(PDF)是描述打印页面的世界领先语言, 第一种同样适用于纸张和在线使用。 在本章中,我们将介绍其用途,功能和历史。 我们看一些有用的免费软件和资源,其中一些我们将在 本书的后面部分使用。

一点历史

今天我们认为高保真的文件交换是理所当然的, 因为知道这里发送的文件在那里看起来是相同的, 反之亦然,并且它可以在屏幕上和纸上同等地显示。情况并非如此。

页面描述语言

我们可以在用户之间以及从用户到打印机之间传递文档, 作为一系列位图图片(例如,TIFF或PNG),每页一个。 但是,这不允许保留任何结构,从而无需在不损失质量的情况下 缩放到不同的纸张尺寸或分辨率,涉及大的文件大小等等。

像PDF这样的页面描述语言是使用高度结构化的数据描述打印 或屏幕页面的内容(文本和图形)的方式,通常是额外的 描述文档各个方面的元数据(例如打印信息或文本注 释或如何查看或打印)。这样,关于如何光栅化文档 (由打印机或屏幕转换为像素)的决定可以留到生产过程结束。 PDF文件可以包含文本和相关的字体定义,矢量和位图图形, 导航(例如超链接和书签)以及交互式表单。

PDF用于内容的确切呈现很重要的地方(例如,用于印刷广告或书籍)。 当内容在最后时刻被布置或回流时通常是不合适的, 例如在可变宽度的网页中 - 诸如HTML和CSS之类的语言将内容与 呈现分开在这些情况下更合适。

其他页面描述语言

当固定字体中的文本行的打印开始被数字图形打印取代时, 创建了许多页面描述语言。然后打印机将处理 用于以适当的分辨率生成位图的语言。 例如,PostScript(Adobe),PCL(Hewlett Packard)和 KPDL(Kyocera)。使用了更简单的语言 用于矢量绘图仪(例如,来自Hewlett Packard的HPGL)。

这些语言的复杂性和功能各不相同。例如,PostScript文件 是完整程序 - 执行程序的结果是文档的可视化表示。 这些语言通常包含用于控制除页面内容之外的文档的各方面 的额外指令,例如从哪个托盘纸中抽取或者输出是否是双面的。

开发PDF

PDF最初是Adobe的一个内部项目,旨在创建一种与平台无关 的文档交换方法。PostScript在打印社区中已经很流行, 但是对于当天使用计算机的屏幕使用并不实用 - 特别是对 于随机访问(要呈现PostScript文档的第50页,必须首先 处理第1-49页)。我们的想法是使用PostScript图形语言 的子集以及辅助数据来创建结构化语言,以便在其上查看独 立文档(或从任何计算机打印出来的b

PDF的一些优点

当许多格式竞争成为行业标准时,最好的竞争者并不总是胜利者 - 运气可以干预。 但在这种情况下,PDF具有许多独特的优点。我们在这里看一些。

随机访问和线性化

与PostScript不同,PDF文档中的任何对象(页面,图形等)都可以在恒定时间内随意访问。 这意味着阅读第150页并不比第1页更难。线性化是在文件中排列对象的过程, 使得给定页面所需的所有对象都位于相邻位置。这解释了为什么你可以快速跳转到在Web浏览器 窗口中在Acrobat Reader中查看的PDF中的任何页面 - 查看器不需要加载整个文件, 它只从服务器获取显示所需的部分 每个新页面。

流创建和增量更新

流创建是PDF格式中固有的能力,允许从头到尾按顺序创建文件,即使最终文件大于可用内存。

增量更新意味着,在编辑文件时,可以将更改写入文件末尾而无需修改任何现有部件 - 这样可以非常快速地保存更改的版本, 并且可以用于提供撤消机制(自上一版本以来)仍然完好无损)。

嵌入字体

PDF中使用的字体与文档一起嵌入。这意味着无论在给定计算机上安装哪种字体,都应始终正确呈现。 创建PDF文档的程序将从字体中删除不必要的数据(例如度量和未使用的字符),因此文件不会变得过大。 PDF支持所有常见的字体格式,例如TrueType和Type 1。

可搜索的文本

大多数PDF文件都维护信息,以将构成文本的字符形状映射到Unicode字符代码。 这意味着你可以复制和粘贴文档中的文本,或轻松搜索文本。 PDF的最新发展允许文档中文本的逻辑顺序与页面上文本的布局分开存储,从而保留更多结构化信息。

ISO标准化

PDF于2008年由国际标准化组织(ISO)作为开放标准发布.ISO-32000-1:2008文档与Adobe先前发布的PDF文件格式文档大致相同。

这种独立性为PDF标准提供了合法性和监督,这应该鼓励其进一步采用。 但是,由于没有真正的工具来检测文件是否符合标准(Adobe Reader会很乐意加载格式错误的文件, 因此很多工具都会创建它们),真正的严谨性还需要一段时间。

专业的PDF格式

PDF格式有几种专门的变体 - 标准化和开发中。这些是PDF格式的子集。 每个文件都是有效的PDF文档,但对所使用的设施或内容本身有限制。其中两个,PDF/A和PDF/X,现在是ISO标准。

PDF/A

PDF/A标准(ISO 19005-1:2005)为在图书馆,国家档案馆和官僚机构中长期存档的文件定义了一套规则。 它还需要“符合标准的阅读器”以某种方式,使用嵌入字体,使用颜色管理等。简而言之,对PDF/A的限制是:

  • 无加密
  • 要嵌入的所有字体
  • 需要元数据
  • 不允许使用JavaScript
  • 仅限与设备无关的色彩空间
  • 没有音频或视频内容

PDF/A合规性有两个级别:PDF/A-1b(“B级合规性”)要求对文档进行精确的视觉复制。 PDF/A-1a(“A级合规性”)要求文本可以映射到Unicode,并且除了要求精确的视觉再现之外,还要记录文本的顺序和结构。

PDF/A能力中心是代表PDF/A利益相关者的行业组织。第二个ISO版本的PDF/A正在准备中。

PDF/X

PDF/X标准是印刷行业图形交换的ISO标准系列,其中最新的是PDF/X-5(ISO 15930-8:2010)。它定义了许多限制:

  • 必须嵌入所有字体
  • 必须嵌入所有图像数据
  • 不能包含声音,电影或不可打印的注释
  • 没有表格
  • 没有JavaScript
  • 有限的压缩算法
  • 无加密

以及一些额外的要求:

  • 文件使用subversion标记为PDF/X(例如,PDF/X-5)
  • 除了正常的页面尺寸外,还需要出血,修剪和/或艺术盒。这些框定义了介质的大小,可打印区域,最终切割尺寸等。
  • 如果文件已被捕获,则设置标志。陷印是在图形对象之间创建小的重叠以掩盖多个彩色打印过程中的注册问题的过程。
  • 文件必须包含输出意图,其中包含描述如何打印的颜色配置文件。

版本摘要

PDF完全向后兼容(你可以将PDF版本1.0文档加载到为PDF 1.7设计的程序中) 并且大部分向前兼容(为PDF 1.0编写的程序通常可以加载PDF 1.7文件)。 确保前向兼容性是因为读者忽略了他们不理解的内容 - 只有在引入新的压缩方法或对象存储机制时才会被忽略。 自2003年的PDF 1.5以来,这种变化很小。表1-1总结了PDF版本及其功能。

PDF 版本 Acrobat Reader 版本 推出 新功能摘要
1.0 1.0 1993 首发
1.1 2.0 1996 设备无关的颜色空间,加密(40位),文章线程,命名目标和超链接
1.2 3.0 1996 AcroForms(交互式表单),电影和声音,更多压缩方法,Unicode支持。
1.3 4.0 2000 更多色彩空间,嵌入(附加)文件,数字签名,注释,蒙版图像,渐变填充,逻辑文档结构,印前支持
1.4 5.0 2001 透明度,128位加密,更好的表单支持,XML元数据流,标记PDF,JBIG2压缩
1.5 6.0 2003 对象流和交叉引用流,用于更紧凑的文件,JPEG 2000支持,XFA表单,公钥加密,自定义加密方法,可选内容组
1.6 7.0 2004 OpenType字体,3D内容,AES加密,新颜色空间
1.7 (later ISO 32000-1:2008) 8.0 2006 XFA 2.4,新类型的字符串,公钥体系结构的扩展
1.7 Extension Level 3 9.0 2008 256位AES加密
1.7 Extension Level 5 9.1 2009 XFA 3.0.
1.7 Extension Level 8 X 2011 未知

什么是PDF?

典型的PDF文件包含数千个对象,多种压缩机制,不同的字体格式, 以及矢量和光栅图形的混合以及各种元数据和辅助内容。 我们在这里简要介绍这些元素,以供上下文使用 - 在后面的 章节中将对它们进行更全面的介绍。

文本和字体

PDF文件可以包含从所有常用格式(Type1,TrueType,OpenType, 旧版位图字体等)的多种字体中提取的文本。 字体文件嵌入在文档中,因此字符形状始终可用, 这意味着文件应在任何计算机上呈现相同的形状。 支持各种字符编码,包括Unicode。

文本可以填充任何颜色,图案或透明度。 一段文本可以用作剪辑其他内容的形状, 允许复杂的图形效果,同时文本仍然可选择和可编辑。

通常,足够的信息在PDF文档中编码以允许文本提取, 尽管该过程并不总是直截了当。

矢量图像

PDF中的图形内容基于Adobe PostScript语言中首次使用的模型。它由直线和曲线构成的路径组成。 可以填充每个路径,“抚摸”以绘制线,或两者。线条可以有不同的厚度,连接样式和破折号图案。

路径可以填充任何颜色,具有由其他对象定义的重复图案,或者具有两种颜色之间的平滑渐变。所有这些选项也适用于 抚摸路径。

可以使用各种普通或渐变透明度渲染路径,其中几种不同的混合模式定义了半透明对象如何相互作用。 出于透明的目的,可以将对象组合在一起,因此可以一次将单个透明度应用于整个对象组。

路径可用于剪切其他对象,以便仅显示与剪切路径重叠的那些对象的部分。这些剪辑区域可以彼此嵌套。

PDF有一种机制,允许图形定义一次然后使用多次 时间在不同的背景下。例如,这可以用于重复的图案 跨越多个页面。

光栅图像

PDF文档可以包括在每个组件1到16位之间的位图图像,在几个颜色空间中(例如,三分量RGB或四分量CMYK)。 可以使用各种无损和有损压缩机制来压缩图像。

图像可以以任何比例或旋转放置,用于创建填充图案,并且可以具有掩模,该掩模定义它们如何使用透明度与它们所放置的背景混合。

色彩空间

PDF可以使用与特定电子或打印设备(灰度,RGB,CMYK)相关的色彩空间以及与人类色彩感知相关的色彩空间。 此外,还有印刷业的色彩空间,如专色。如果简单的PDF程序(如屏幕上的查看器)不支持更高级的颜色空间, 则它们可以回退到基本的颜色空间。

元数据

PDF文档有一组标准元数据,如标题,作者,关键字等。这些是在图形内容之外定义的,对文档没有影响 什么时候看。还记录创建者(创建内容的程序)和制作者(编写PDF文件的程序)。每个文档还有一组唯一标识符, 允许通过工作流跟踪它们。

从PDF 1.4开始,元数据可以使用Adobe的可扩展元数据平台(XMP)存储在嵌入PDF中的XML(可扩展标记语言)文档中。 这定义了一种存储PDF中对象的元数据的方法,该方法可以由第三方扩展以保存与其特定工作流程或产品相关的信息。

导航

在屏幕上查看时,PDF文档有两种导航方法:

  • 文档大纲(通常称为文档的书签)是文档中的目标结构列表,与其一起显示。单击一个可将视图移动到该页面或位置。
  • 文档或文档图形中的超链接允许用户单击以移动文档中的其他位置,或打开外部URL。

可选内容

PDF中的可选内容组允许将页面内容的一部分组合在一起并显示 - 或者不显示 - 基于某些其他因素(用户选择, 文档是在屏幕上还是在打印时,缩放因子)。可以定义组之间的关系,以便它们彼此依赖。一个用途是模拟图形 包中的“图层”。例如,当使用PDF查看器读取其生成的文档时,将保留Adobe Illustrator图层。

多媒体

PDF文档可以包括各种多媒体元素。其中许多都破坏了PDF中固有的可移植性,并且在Adobe产品之外通常得不到很好的支持。 来自PDF 1.2 可以嵌入声音和电影。 来自PDF 1.4 可以定义幻灯片,以便在具有转换的页面之间自动移动 效果。 来自PDF 1.5 引入了包含任意媒体类型的更通用的系统。 来自PDF 1.6 可以嵌入3D图稿。

互动表格

PDF中有两种不兼容的表单体系结构:AcroForms(一种开放标准)和Adobe XML Forms Architecture(XFA), 它已被记录但需要Adobe的商业软件。

表单允许用户填写文本字段,并使用复选框和单选按钮。数据完成后,可以将其保存到文档中(如果允许) 或提交到URL进行进一步处理。嵌入式JavaScript通常与表单结合使用,以处理字段值或类似任务的验证。

逻辑结构和回流

逻辑结构工具允许将有关结构内容(章节,部分,图形,表格和脚注)的信息与图形内容一起包含在内。 特定元素可由第三方定制。

标记的PDF是具有基于一组Adobe定义的元素的逻辑结构的PDF。读取器可以回复遵循这些约定的文件, 以便以不同的页面大小或文本大小显示相同的文本,例如在电子书阅读器中。

安全

可以使用RC4或AES加密方法对PDF文档进行加密以确保安全性。有两个密码 - 所有者密码和用户密码。 所有者密码为所有更改解锁文件,用户密码只允许在文件最初加密时由所有者选择的一系列操作(例如,允许或禁止打印或文本提取)。 用户密码通常是空白的,因此文件似乎正常打开,但功能受到限制。

从PDF 1.3开始,数字签名可用于验证a的身份 用户或文档的内容。

压缩

PDF中的图像和其他数据流可以使用第三方定义的各种无损和有损方法进行压缩。通过仅压缩这些流(而不是 整个文件),PDF对象的结构始终可用,无需解压缩整个文件,只有在需要时才能处理压缩的部分。 有几组压缩方法:

  • 双级(例如,黑色和白色)图像的无损压缩。PDF支持双层图像的标准传真编码方法,以及PDF 1.4的JBIG2标准,它为同一类图像提供更好的压缩。
  • 有损图像滤镜,如JPEG和PDF 1.5,JPEG2000。
  • 适用于图像数据和一般数据压缩的无损压缩机制,例如Flate(Zip算法),Lempel-Ziv-Welch(LZW)和行程编码。

谁在使用PDF?

PDF广泛用于各行各业。我们在这里描述一些,解释为什么PDF适合每个。

印刷业

PDF支持商业打印所需的色彩空间,页面尺寸信息 (如介质,裁剪,艺术和出血盒),陷印支持和分辨率 独立性。与其他技术一起,PDF是出版印刷工作流程的 关键部分。PDF元数据的可扩展性允许各种方案用于 将额外数据与文档一起包括,并且在整个发布过程中将其与 文档保持在一起 - 工作流的不理解特定元数据的部分将至少保留它。

电子书和出版

本书是使用DocBook系统创建的,该系统采用XML格式 的结构化文档,对其进行排版,并生成包含超链接和书 签的PDF,以及适用于打印的更传统的PDF。

PDF是竞争电子书格式之一。为了支持在各种屏幕上显示, PDF文档可以用回流信息标记,允许在每个设备上以不同 的宽度显示文本行。这与PDF的其他用途不一致, 其中固定文本布局是必需的。

PDF表格

当现有的纸质系统转换为电子系统或必须与它们一起存在时, PDF表格特别有用。PDF格式(在线填写然后打印出来) 看起来与在纸上手动填写的格式相同,并且可以以相同的 方式由现有的人和计算机系统处理。

从PDF查看器中自动提交表单,使用JavaScript添加 智能(例如确保数字以税表形式添加),以及使用数 字签名签署填写表格都是使用令人信服的理由PDF格式的电子表格。

文档存档

通过PDF/A,PDF是长期归档的理想格式, 结合了扫描和电子内容的精确表示,以及Unicode语言支持, 以及各种数据的压缩机制,包括用于单色图像的重要CCITT传真和 JBIG2方法。作为ISO标准(以及几乎无处不在的标准) 保证这些文档可以在将来很长时间内阅读。

PDF可用于光学字符识别(OCR),允许从原始文本创建 可搜索的文本,精确的视觉表示与识别的文本一起保留。

作为文件格式

乍一看,PDF不适合用作可编辑的矢量图形格式。 例如,圆圈不会像圆圈一样保持可编辑状态, 因为它将被转换为多条曲线(PDF中没有圆形元素)。

但是,如果适当地使用它的可扩展性来存储辅助数据, 那么它就是一个很好的解决方案。例如,Adobe Illustrator 现在使用扩展形式的PDF作为其文件格式。 该文件可以在任何PDF查看器中查看,但Illustrator 可以在将数据加载回程序时使用扩展数据。

有用的免费软件

在本书中,我们使用各种软件来帮助我们举例。 幸运的是,你需要的一切都是免费提供的。你需要一个PDF查看器:

  • Acrobat Reader是Adobe自己的PDF查看器。 它支持PDF的所有版本和功能,并在大多数平台上附带浏览器插件。 它适用于Microsoft Windows,Mac OS X,Linux,Solaris和Android。

  • Preview是预安装在Mac OS X上用于PDF文档的PDF查看器和浏览器插件。它功能强大,速度非常快, 但不支持Acrobat Reader的所有功能。许多人坚持使用Preview作为PDF文件的默认应用程序,但也安装了Acrobat Reader。

  • Xpdf是Unix的开源PDF查看器。它支持合理的PDF子集。

  • gv是GhostScript的PostScript和PDF查看器前端(见下文)。它可以呈现几乎所有文档的文本和图形内容。 但是,它缺少其他PDF查看器的大多数交互功能。

有两个关键的命令行工具:

  • pdftk是一个多平台命令行工具,用于以各种方式处理PDF文件。它可以以预构建的形式下载, 适用于Microsoft Windows,Mac OS X和Linux,也可以源代码形式下载。
  • Ghostscript是一组工具,包括PostScript和PDF的解释器。它可用于呈现PDF文件,并从命令行以各种方式处理它们。 它以二进制形式提供给Microsoft Windows,并以源代码形式提供给所有平台。

有关Adobe和开源PDF软件的完整讨论,请参见第10章