为什么pdflatex生成的PDF文件无法通过验证?

为什么pdflatex生成的PDF文件无法通过验证?

为什么使用 pdflatex 编译的简单 PDF 文件包含如此多的 PDF 错误?

我能看到的最简单的例子是“Hello World!”,一旦编译完成,

\documentclass{report}
\begin{document}
    Hello World!
\end{document}

生成一个文件“hello.pdf”并输入到PDFbox:

$ java -jar ../preflight-app-1.8.10.jar hello.pdf

The file hello.pdf is not valid, error(s) :
1.2.1 : Body Syntax error, Single space expected
1.2.1 : Body Syntax error, Single space expected
1.2.1 : Body Syntax error, EOL expected before the 'endobj' keyword
1.2.1 : Body Syntax error, Single space expected
1.2.1 : Body Syntax error, Single space expected
1.2.1 : Body Syntax error, Single space expected
7.1 : Error on MetaData, Missing Metadata Key in catalog

LuaLaTeX 也存在同样的问题,但总体来说错误较少。

答案1

PDFBox 的预检工具不仅仅针对 PDF,还针对 PDF/A-1b 标准进行验证。

关于 PDF/A-1b 的第一个错误应该可以通过最新的 pdfTeX 解决,我在使用 pdfTeX 1.40.16(TeX Live)时没有遇到这些错误。

关于元数据的最后一个错误 7.1 来自 PDF/A-1b 的要求,即在 XMP 格式中嵌入元数据,请参阅包hyperxmp,最新版本的软件包pdfx支持 PDF/A,或封装xmpincl

答案2

PDF/A标准旨在优化档案。这意味着必须嵌入字体(自动完成),它需要元数据,以便您在档案中找到文档。最后但并非最不重要的是,它需要一个 OutputIntent 来指定颜色最初的样子。还有更多要求,但这些是最重要的。

尽管 PDFBox 1.8 没有抱怨缺少 OutputIntent,但它的较新版本会抱怨。

看到这个最小示例 PDF/A 文档关于如何直接从 pdfTeX 生成 PDF/A。这验证了:

java -jar preflight-app-2.0.19.jar hyperxmp.pdf
The file hyperxmp.pdf is a valid PDF/A-1b file

(pdf)TeX 无法猜测您打算使用哪种颜色空间,也无法猜测特定文档的有用元数据是什么。这就是为什么您必须指定这些值。请记住,验证器只是检查在场某些值。例如,如果你将作者设置为“我”或空的即使您的文档通过了自动验证,人们也很可能无法在图书馆中找到您的文档。

相关内容