在本章中,我们将讨论与PDF文档的视觉外 观无关的四个主题,但讨论辅助数据, 这些辅助数据也可用于交互式,屏幕上 文档的使用,以及用于携带文档以供使用的 额外信息的元数据 通过PDF工作流程中的程序。
Destinations
XML元数据
文件附件
注释
文档的书签(适当地称为文档大纲)是条目树(通常是章节,章节,段落等的标题), 可以在PDF查看器中单击以在文档中移动。每个条目都有一些文本和目的地描述它链接到的位置。
目的地在PDF文件中定义一个位置,包括页码,该页面内的位置以及查看该页面时使用的 放大率。目的地可以明确定义(我们将为简单起见)或由名称引用,并在列出所有目的 地的文档范围名称树中查找。书签通常与PDF查看器中的文档一起显示。
目标是使用数组对象定义的,内容取决于目标的类型。目标语法总结在表7-1中。
文档大纲由大纲条目树和大量项目词典定义的大纲条目树组成。大纲字典由文档目录中的/Outlines条目指向。条目的子条目(子)可以默认显示(打开)或默认隐藏,仅通过单击(关闭)显示。大纲字典总结在表7-2和7-3中。
考虑一个有三页的文件。我们希望构建以下层次结构:
Part 1 (points to page one) Part 1A (points to page two) Part 1B (points to page three)
结果代码如例7-1所示。对于第一,第二和第三页,本文档中的页面对象具有对象编号3,5和7。 对象12是文档目录。对象11是文档概要字典,对象8,9和10是文档概要项目字典。
Example 7-1. An example document outline 8 0 obj << /Parent 10 0 R /Title (Part endobj 9 0 obj << /Parent 10 0 R /Title (Part endobj 10 0 obj << /Parent 11 0 R /First 9 0 R endobj 11 0 obj << /First 10 0 R /Last 10 0 R endobj 12 0 obj << /Outlines 11 0 R /Pages 1 0 1B) /Dest [ 7 0 R /Fit ] /Prev 9 0 R >> 1A) /Dest [ 5 0 R /Fit ] /Next 8 0 R >> /Dest [ 3 0 R /Fit ] /Title (Part 1) /Last 8 0 R >> >> R /Type /Catalog >>
Adobe Reader显示文档及其大纲,如图7-1所示。
从PDF 1.4开始,元数据流可用于将XML元数据附加到整个文档或其中的各个元素。 文档级元数据流扩展并取代文档信息字典(为了与旧的PDF程序兼容,几乎总是包含该字典)。
元数据以未压缩和(通常)未加密的方式存储,并且以这样的方式使得不了解PDF 的外部工具可以容易地在PDF文件中找到它。
XML使用由可扩展元数据平台(XMP)定义的标记,该标准在Adobe的XMP:可扩展元数 据平台中进行了描述。该格式包括以与平台无关的方式以其他格式(例如,PDF)嵌入 元数据的方法,使得不能理解封闭格式的程序仍然可以提取XMP数据。有关XMP格 式的详细信息,请访问Adobe网站。
例7-2中显示了示例XMP元数据。你可以从文档信息词典中看到一些熟悉的条目。 还要注意序列/Type /Metadata /Subtype /XML,它将此流标识为XMP元数据。通过使用文档目录中的/Metadata条目将元数据流添加到文档中。
Example 7-2. XML Metadata for the ISO PDF Format reference manual PDF. The ↵ symbol is used to indicate a line which continues without a carriage return. The ␣ symbol is used to represent a space character. 4884␣0␣obj<</Length␣3508/Type/Metadata/Subtype/XML>>stream <?xpacket␣begin=''␣id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters␣esc="CRLF"?> <x:xmpmeta␣xmlns:x='adobe:ns:meta/'␣x:xmptk='XMP␣toolkit␣2.9.1-14,␣framework␣1.6'> <rdf:RDF␣xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'↵ xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description␣rdf:about='uuid:b8659d3a-369e-11d9-b951-000393c97fd8'↵ ␣xmlns:pdf='http://ns.adobe.com/pdf/1.3/'↵ ␣pdf:Producer='Acrobat␣Distiller␣6.0.1␣for␣Macintosh'>↵ </rdf:Description> <rdf:Description␣rdf:about='uuid:b8659d3a-369e-11d9-b951-000393c97fd8'↵ ␣xmlns:xap='http://ns.adobe.com/xap/1.0/'↵ ␣xap:CreateDate='2004-11-14T08:41:16Z'↵ ␣xap:ModifyDate='2004-11-14T16:38:50-08:00'↵ ␣xap:CreatorTool='FrameMaker␣7.0'↵ ␣xap:MetadataDate='2004-11-14T16:38:50-08:00'>↵ </rdf:Description> <rdf:Description␣rdf:about='uuid:b8659d3a-369e-11d9-b951-000393c97fd8'↵ ␣xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'↵ ␣xapMM:DocumentID='uuid:919b9378-369c-11d9-a2b5-000393c97fd8'/> <rdf:Description␣rdf:about='uuid:b8659d3a-369e-11d9-b951-000393c97fd8'↵ ␣xmlns:dc='http://purl.org/dc/elements/1.1/'↵ ␣dc:format='application/pdf'>↵ <dc:description><rdf:Alt>↵ <rdf:li␣xml:lang='x-default'>␣Adobe␣Portable␣Document␣Format␣(PDF)␣</rdf:li>↵ </rdf:Alt></dc:description>↵ <dc:creator>␣<rdf:Seq>␣<rdf:li>↵ XML Metadata | 93 Adobe␣Systems␣Incorporated␣</rdf:li>␣</rdf:Seq>␣</dc:creator>↵ <dc:title>␣<rdf:Alt>↵ <rdf:li␣xml:lang='x-default'>PDF␣Reference,␣version␣1.6␣</rdf:li>␣</rdf:Alt>↵ </dc:title></rdf:Description>↵ </rdf:RDF> </x:xmpmeta> ␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ (Many more lines of padding) <?xpacket␣end='w'?> endstream endobj
PDF中使用注释在页面内容本身之外添加注释或交互元素。每个查看器应用程序 (例如Adobe Reader或Mac OS X Preview)都可以以不同的方式显示这些注释, 甚至可以在软件版本之间进行更改,因此无法依赖精确的视觉效果。注释不会影响打印输出。
可以使用页面字典中的条目/Annots下的数组将一个或多个注释与每个页面相关联。 每个注释都是字典。表7-4中描述了更重要的条目。 每种类型的注释在此词典中都有其他类型。
我们将看两种注释:可用于添加注释的文本注释,以及用于在文档中创建超链接的链接注释。 绘制文档还有许多其他类型,突出显示文本和添加打印机标记。 在第96页的“文件附件”中,我们使用文件附件注释向各个页面添加附件。
首先是文本注释。这里,/Subtype是/Text。代码如例7-3所示。 我们将额外的注释字典条目/Open设置为true,以指示在打开文档时注释将是可见的。 使用/C条目将背景颜色设置为白色。
Example 7-3. A Text annotation 6 0 obj << /Subtype /Text /Open true /Contents (An example text annotation) /Type /Annot /Rect [400 100 500 200] /C [1 1 1] RGB (1, 1, 1) i.e., White >> /Annots [6 0 R] Extra entry in page dictionary
Adobe Reader中的结果如图7-2所示。请注意,Adobe Reader会忽略此处的/Rect条目 - 其他查看者可能会使用它。
现在,让我们尝试链接注释,以构建从第一页到第三页的超链接。 链接注释具有子类型/Link和给定目标的/Dest条目(在第90页的“目标”中描述)。/Rect条目定义超链接的区域。
代码如例7-4所示。
Example 7-4. A link annotation 6 0 obj << /Subtype /Link /Dest [4 0 R /Fit] /Type /Annot /Rect [45 760 260 800] >> /Annots [6 0 R] Extra entry in page dictionary
Adobe Reader中的结果如图7-3所示。
附件是一种在PDF文档中包含一个或多个文件(任何类型)的方法。 文件可以作为整体附加到文档,也可以附加到单个页面。 通常,PDF查看器将显示任何附件的列表,允许用户打开或保存它们。 例如,可以使用此工具将示例资源与幻灯片演示文稿的PDF捆绑在一起。
嵌入文件本身只包含在流对象中,其中/Type /Embedded File作为流字典中的附加条目。 示例7-5中显示了示例嵌入文件的代码。
Example 7-5. An embedded file 8 0 obj << /Type /EmbeddedFile /Length 35 >> stream This is a text file attachment... endstream endobj
嵌入式文件流以两种完全不同的方式引用:一种用于整个文档的附件,另一种用于附加到特定页面。
要附加到整个文档,/EmbeddedFiles条目包含在文档目录中/Names条目引用的名称字典中。 代码如例7-6所示。
Example 7-6. PDF Code for an attachment at the document level. The embedded file is object 8 (see Example 7-5). 9 0 obj << /Names << /EmbeddedFiles << /Names [ (attachment.txt) << /EF << /F 8 0 R >> /F (attachment.txt) /Type /F >> ] >> >> /Pages 1 0 R /Type /Catalog >> endobj
要附加到单个页面,将使用一种特殊类型的注释,通常在页面词典的/Annots字典中列出。 代码如例7-7所示。
例7-7. 特定页面附件的PDF代码。嵌入文件是对象8 (see Example 7-5). 9 0 obj << /Type /Page (Other dictionary entries as usual) /Annots [ << /FS << /EF << /F 8 0 R >> /F (attachment.txt) /Type /F >> /Subtype /FileAttachment /Contents (attachment.txt) /Rect [ 18 796.88976378 45 823.88976378 ] >> ] >> endobj
Adobe Reader在侧栏中显示附件如图7-4所示。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8