PDF格式分析(二十五)File Specifications文件规范

PDF文件可以使用文件规范引用另一个文件的内容,该文件规范通常采用以下两种形式之一:

  • 简单文件规范应仅以标准格式提供目标文件的名称,与任何特定文件系统的命名约定无关。 它应采用字符串或字典的形式
  • 完整文件规范应包括与一个或多个特定文件系统相关的信息。 它只能表示为字典形式。

文件规范表示PDF文件外部的文件或嵌入在引用PDF文件中的文件,允许其内容与PDF文件一起存储或传输。 以上两种情况,该文件都应被视为PDF文件的外部文件。

File Specification Strings 文件规范字符串

绝对路径:/HardDisk/ArtFiles/Figure1.pdf
相对路径:../../ArtFiles/Figure1.pdf
各个操作系统的文件路径形式是不一样的,在PDF中会统一成一种形式:
这里写图片描述
在PDF 1.2或更高版本中,文件路径支持多字节字符,使用十六进制表示,用尖括号(<和>)包起来。

File Specification 文件规范字典

文件规范字典这种形式,提供了比字符串形式更多的灵活性,可以支持不同于标准文件系统(DOS / Windows,Mac OS和UNIX)指。 无论使用何种平台,符合要求的阅读器都应使用F和UF(以PDF 1.7开头)条目来指定文件。 UF条目虽然是可选的,但建议输出,因为它可以实现跨平台和跨语言的兼容性。

Type:固定为Filespec

FS:指定用于解释此文件规范的文件系统的名称。 如果此条目存在,则字典中的所有其他条目应由指定的文件系统解释。 PDF应仅定义一个标准文件系统名称URL; 此条目应独立于F,UF,DOS,Mac和Unix条目。示例如下:

<< /FS /URL
/F (ftp://www.beatles.com/Movies/AbbeyRoad.mov)
>>

F:文件规范字符串(文件路径)

UF:Unicode文本字符串,文件规范字符串。 使用PDFDocEncoding或UTF-16BE编码的文本字符串,带有前导字节顺序标记(U+FEFF)。 出于向后兼容性原因,F条目应与此条目一起包含在内。

DOS:表示DOS系统文件名的文件路径。 此条目已过时,不建议使用。

Mac:表示MAC OS系统文件名的文件路径。这个条目过时了,不建议使用。

Unix:表示Unix系统文件名的文件路径。这个条目过时了,不建议使用。

ID:由两个字节字符串组成的数组,构成一个文件标识符。使用此条目可以提高应用程序查找目标文件的机会,并允许用户在链接生成后文件发生更改时向用户发出警告。

V:布尔值,指示文件规范引用的文件是否是易失性的(随时间变化频繁)。 如果值为true,则应用程序不应缓存文件的副本。 例如,引用实时摄像机的URL的电影注释可以将该标志设置为真,以通知符合要求的阅读器每次播放时应该重新获取电影。 默认值:false。

EF:嵌入式文件流(下面介绍)

RF:相关文件数组(下面介绍)

Desc:描述文件的文本。

CI:集合项目字典,用于创建便携式集合的用户界面(下面介绍)

嵌入式文件流 Embedded File Streams

如果PDF文件引用外部文件,并且PDF文件用于存档或传输,则应进行一些规定,以确保外部引用保持有效。 一种方法是在PDF文件中安排外部文件的副本。 嵌入式文件流(PDF 1.3)允许,将引用文件的内容直接嵌入到PDF文件的正文中来解决此问题。 这使得PDF文件成为一个独立的单元,可以作为单个实体进行存储或传输。

如果文件引用外部存储的高分辨率图像的OPI(Open Prepress Interface)词典,则图像数据可以合并到带有嵌入文件流的PDF文件中。

嵌入式文件流以下列方式之一包含在PDF文档中:

  • EF条目指定嵌入文件流的。
  • 嵌入式文件流可以通过PDF文档名称字典中的EmbeddedFiles条目(PDF 1.4)与文件相关联。 名称树中的名称字符串映射到EF条目引用嵌入式文件流的文件名。

从PDF 1.6开始,应使用文件规范字典的Desc条目来提供嵌入文件的文本描述,该文本描述可以在符合本标准的阅读器的用户界面中显示。

嵌入式文件流字典条目如下:

Type:固定为EmbeddedFile
Subtype:嵌入文件的子类型。
Params:嵌入式文件参数字典

嵌入式文件参数字典条目(下列只列出了嵌入文件流特定的条目,stream通用条目的依旧有效)如下:

Size:未压缩嵌入文件的大小(以字节为单位)。
CreationDate:创建嵌入文件的日期和时间。
ModDate:上次修改嵌入文件的日期和时间。
Mac:包含特定于Mac OS文件的附加信息的子字典
CheckSum:一个16字节的字符串,它是未压缩的嵌入式文件的字节的校验和。 校验和应通过将标准MD5消息摘要算法(在Internet RFC 1321中描述,MD5消息摘要算法;参见参考书目)应用于嵌入文件流的字节内容来计算。

Mac OS文件的附加信息的子字典条目如下:

Subtype:整型,嵌入文件的文件类型。 它应根据Mac OS约定编码为整数:一个4字符的ASCII文本文字,应为32位整数,首先是高位字节。 示例:文件类型“CARO”表示为十六进制整数4341524F,以十进制表示为1128354383。
Creator:整型,嵌入文件的创建者签名应以与Subtype相同的方式编码。
ResFork:流对象,嵌入文件的资源派生的二进制内容。

在某些情况下,PDF文件可以引用一组相关文件,例如:组成 DCS 1.0 颜色分隔图像的五个文件的集合。 文件规范只显式指定其中一个文件; 其余的应通过该文件名的某些系统变化来识别(例如:通过改变扩展名)。 将此类文件嵌入PDF文件时,也应嵌入相关文件。 可以通过在文件规范字典中包含相关文件数组(PDF 1.3)作为RF条目的值来实现的。阵列应具有2¥n个元素,它们以下列形式配对:

[string1 stream1
string2 stream2

stringn streamn
]

每对的第一个元素应该是一个字符串,给出一个相关文件的名称; 第二个元素应该是一个包含文件内容的嵌入文件流。

在以下示例中,对象21,31和41分别是包含DOS文件SUNSET.EPS,Mac OS文件Sunset.eps和UNIX文件Sunset.eps的嵌入文件流。 文件规范字典的RF条目指定阵列,对象30,识别与Mac OS文件相关的一组嵌入文件,形成DCS 1.0集。 该示例仅显示集合中的前两个嵌入文件流; 当然,实际的PDF文件包含所有这些文件。

10 0 obj                             % File specification dictionary
<< /Type /Filespec
/DOS (SUNSET.EPS)
/Mac (Sunset.eps)                    % Name of Mac OS file
/Unix (Sunset.eps )
/EF << /DOS 21 0 R
/Mac 31 0 R                          % Embedded Mac OS file
/Unix 41 0 R
>>
/RF << /Mac 30 0 R >>                % Related files array for Mac OS file
>>
endobj
30 0 obj                             % Related files array for Mac OS file
[ (Sunset.eps) 31 0 R                % Includes file Sunset.eps itself
(Sunset.C) 32 0 R
(Sunset.M) 33 0 R
(Sunset.Y) 34 0 R
(Sunset.K) 35 0 R
]
endobj
31 0 obj                             % Embedded file stream for Mac OS file
<< /Type /EmbeddedFile               % Sunset.eps
/Length …
/Filter …
>>
stream
…Data for Sunset.eps…
endstream
endobj
32 0 obj                             % Embedded file stream for related file
<< /Type /EmbeddedFile               % Sunset.C
/Length …
/Filter …
>>
stream
…Data for Sunset.C…
endstream
endobj

Collection Items 集合项目

从PDF 1.7开始,集合项目字典包含collection模式字典描述的集合中特定文件的数据(其他章节会讲到 )。
下面描述了集合项字典中的条目:
Type:固定为CollectionItem
其他:collection相关(其他章节会介绍)

例子:

/CI <<
/Type /CollectionItem
/from (Rob McAfee)
/to (Patty McAfee)
/subject <<
/Type /CollectionSubitem
/P (Re:)
/D (Let's have lunch on Friday!)
>>
/date (D:20050621094703-0700’)
>>

猜你喜欢

转载自blog.csdn.net/steve_cui/article/details/82428316
今日推荐