
PDF文件包含很多信息。 大多数用于在不同平台上对文档进行相同的可视化。 但是,元数据也很多:创建和编辑的日期和时间,使用的应用程序,文档的主题,标题,作者等等。 这是标准的元数据集,并且有多种方法可以将自定义元数据插入PDF:文件中间的隐藏注释。 在本文中,我们将介绍一些形式的元数据并显示在何处查找它们。
信息元数据
从PDF 1.0开始,有一组标准化的值可以进一步添加到文档中。 文件管理器使用这些值来改善文档搜索。 它们包括:
在PDF 1.1中,此集合已扩展为包含有助于查找文档的其他数据:
严格来说,此信息实际上并未隐藏,因为许多应用程序都允许您查看它。 但这并没有向公众展示。 无论如何,如果您担心安全性,则应谨慎使用此信息,因为以后可以对其进行编辑。 由于元数据可能会与显示的内容分开进行更新,因此这意味着文件管理器和元数据将显示更改,并且内容可能不会更改。

其他元数据
PDF标准现在支持更多的元数据。 您可以使用
XMP格式存储一整套信息流,而不必使用一小组默认值。 结果,任何类型的数据都可以嵌入在那里。 同样,它们不会显示,但是可以由文件管理器进行分析。
XMP流可以被编码,因此人们并不总是可以读取它,但是许多应用程序可以读取和编辑此信息。 这是人类可读格式的XMP的示例:
<xmp:CreateDate>1851-08-18</xmp:CreateDate> <xmp:CreatorTool>Ink and Paper</xmp:CreatorTool> <dc:creator> <rdf:Seq> <rdf:li>Nick Winder</rdf:li> </rdf:Seq> </dc:creator> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">My Amazing PDF</rdf:li> </rdf:Alt> </dc:title>
很容易理解,在尝试确定文档的历史记录或嵌入其他信息时,此信息非常宝贵。 适用于
iOS和
Android的 PSPDFKit支持读取和编辑元数据。
对象元数据
元数据流不限于文档; 元数据也可以分配给文档中的任何对象。 例如,具有嵌入式图像的流。 为了使事情复杂化,辅助元数据也可以存储在流本身中。 如果走得更远,我们可以
将PDF嵌入图像流的元数据中 ,从而实现无限递归! 因此,下次在元数据中检查信息时,请记住,您可能必须经过几个级别才能找到所需的信息。
额外的保存/更新
PDF标准具有附加的保存概念,许多应用程序(包括PSPDFKit)都采用了这种保存概念来加快保存速度。 简而言之,此方法将附加信息添加到文档末尾,不再引用的旧对象将保留在那里。 当您即时更改文档元素并且不想等待漫长的保存过程,或者例如自动保存功能(该过程在后台线程中运行)并且我们希望使用最少的资源时,这非常有用。
如您所知,这将打开整个Pandora的框:文档的历史记录显示了机密或错误的信息,这些信息已从眼睛中删除,但仍保留在文档中。 在这种情况下,建议您完全保存文档。 这将导致旧物件的去除甚至“平滑”,从而将来无法编辑
表格 。
PDF注释
许多编程语言都提供注释,以便编译器或解释器忽略该字符串,PDF中具有相同的选项。 %符号以不同的方式使用格式,但是其中之一是在代码中指示注释。 因此,如果用户在文本编辑器中打开文档,则他可能会看到您的PDF处理器插入的一些秘密消息。 PDF渲染器将忽略这些注释行,因此文件看起来正确,并且渲染后不显示任何注释。
一本大字典!
最后要注意的是,PDF格式实际上是一个大词典! 从技术上讲,任何人都可以嵌入文档并进行更改。 并非每项更改都像编辑一行一样容易,但是可以做到。 因此,您应始终记住PDF中可能隐藏了哪些信息。 此外,如果您处理机密信息,则一定要使用
数字签名来确保文档没有被作者以外的任何人更改,并且作者是您所期望的作者,而不是其他人。
结论
本文列出了一些元数据可以在您不知情的情况下输入文档的方法。 还有其他因素需要考虑,例如
JavaScript对PDF的支持 。 使用JavaScript,选项通常是无止境的。 隐藏的对象也可以存储在文档中,通常会对其进行分析但不会显示。 这是将某种类型的信息注入解析器的好方法。 PDF是非常广泛的标准,因此您应该始终知道您使用和信任哪种PDF阅读器软件。