pdfx 包因 veraPDF 失败,并且 preflight 不支持特殊字符(未使用 UTF-8)并且

pdfx 包因 veraPDF 失败,并且 preflight 不支持特殊字符(未使用 UTF-8)并且

经过大量工作后,我用 LaTeX 完成了我的博士论文。然而,当我读到必须将 PDF 作为 PDF/A 文件提交时,我遇到了一个大问题。首先,我尝试使用 Acrobat Professional 软件进行转换(IT 人员完成了转换),但是失败了。因此,我退一步尝试通过 LaTeX 构建 PDF/A 文件,并遇到了 pdfx 包。使用此包时,我无法使用它,因为usepackage[utf8]{inputenc}它是包的依赖项pdfx。但是,在更改了一些已经在使用或不再存在的命令和其他数学运算符(例如)后,我遇到了变音符号不再起作用\bullet的问题。ä ü ö ß

更新该问题与 未更新的版本有关pdfx package。更新后,\usepackage[utf8]{inputenc}可以使用并且一切正常。


第二个问题是生成的 PDF 不符合 PDF/A 标准。preflight and veraPDF出现了一堆我无法处理的错误。有什么想法吗?


我希望有人能给我一些建议。

提前感谢 Tobi

答案1

更新:底部添加了 pdfx 补丁(2018 年 2 月 23 日)

今天,我对使用 LaTeX 生成 PDF/A 文件这一主题进行了一些研究,并pdfx package找到了解决方案。实际上,我将介绍两个版本以及使用该veraPDF应用程序进行的验证检查。好的,让我们开始吧。最简单的方法是使用 Acrobat Professional(如果有的话)。


使用 Acrobat Professional

  • 将 LaTeX 文件直接编译为 PDF
  • 使用已安装 Adob​​e 软件的电脑打开 PDF
  • 使用打印机打印文件Adobe PDF并选择 PDF/A 选项
  • 检查veraPDFpreflight-> 有效
  • 完成并快乐

就我而言,我无法直接转换,因为出现了一些错误。我不知道为什么,但唯一可行的方法就是上面提到的那个。


pdfx在 LaTeX 中使用包

  • 确保有最新的pdfx软件包可用。为此,您可以简单地使用kpsewhere pdfx.styLinux 中的功能来获取文件路径并检查版本(使用编辑器打开它)。就我而言,我有一个较旧的软件包,必须更新该软件包(https://ctan.org/pkg/pdfx?lang=en
  • 文档中提供了所有信息以及进一步的想法,例如how to add the meta keywords

例如,我使用input函数在第一个位置添加了一个新文件(注意:在文档类定义之前)。

\input{Pre/Pre_MetaData}
\documentclass[...]
\input{Pre/Pre_Packages}
\input{Pre/Pre_Settings}

而在Pre_MetaData文件中我们会发现这种代码(可以根据pdfx包的文档进行扩展):

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 

\begin{filecontents*}{\jobname.xmpdata}
 \Title{Your Title of the work}
 \Author{Tobias Holzmann\sep And Others}
 \Keywords{Your\sep Keywords\sep}
 \Publisher{...}
 \Copyright{...}
\end{filecontents*}

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 

pdfx如果一个人在工作结束时使用该包(我的意思是你写了一本书或一篇论文并意识到你必须建立一个 PDF/A 文件),那么你可能不得不自己制作一个变通的生成命令。所以我建议所有直接知道它必须是 PDF/A 文件的人直接开始包含pdfx package。此外 - 正如文档中所述 - 最好首先加载该包。之后,您可以重新编译文档并生成 PDF/A pdf。总结:

  • 确保安装了最新的pdfx软件包
  • 在开头就包含元数据(在文档类开始之前)
  • pdfx首先包含该包(也阅读依赖列表:例如,该hyperref包不需要再由用户包含,因为pdfx正在加载它......)
  • 将配色方案添加到你的 LaTeX 项目中(你可以在源文件或此处找到一个)http://www.color.org/iccprofile.xalter
  • 消除自己定义的命令的问题(如果有的话)
  • 用 pdflatex 编译它(我就是这么做的)
  • 检查一下veraPDF,你可能会看到一堆错误,下面总结并解决了这些错误
  • 如果一切顺利,恭喜你,你就完成了:)

veraPDF和的错误pdfx

我意识到,使用第一种方法(Acrobat Pro)时,我得到了有效的 PDF/A 结果,而使用 LaTeX 和该软件包时,preflight我却没有通过很多检查。然而,这告诉我该软件包或 LaTeX 编写的 PDF 存在一些问题。veraPDFpdfxpdfx

veraPDF在使用和验证由 LaTeX 生成的 PDF/A 文件时,我收到了一系列错误消息。preflight一开始,我有超过五十万次检查失败,约 543,000 次。大多数错误与未包含的配色方案有关(上面列表中的第 4 点)。只需添加配色方案即可轻松解决此问题。

另一组错误很难弄清楚,它们与透明度图形和其他功能有关,而这些功能(现在我知道了)不受 pdf 版本 1.4 的支持。在我的 LaTeX 项目中,有超过 50 个 eps 文件使用该epstopdf包转换为 pdf。这里的问题是pdfx基于该包引入的问题而开始的。我猜这是一个错误,我已经向创建者发送了一条消息。

  • 无论如何,pdfx软件包都会将我们创建的 PDF 版本设置为版本 1.4,该版本符合 2005 年发布的 PDF/A-1 标准;参见 ISO 190005-1(https://en.wikipedia.org/wiki/PDF/A)。
  • 但是,任何为该包设置的设置/选项都pdfx将导致 PDF 版本 1.4。即使 PDF/A-2 规范已完成。这实际上应该会给出 PDF 版本 1.7。
  • 问题就出在这里,因为epstopdf生成的 pdf 是 pdf 版本 1.5,而 LaTeX 文档是版本 1.4。这是不兼容的,版本 1.5 的图形 pdf 确实具有版本 1.4 不支持的功能
  • 版本的差异导致了许多veraPDF与图形的透明度和不透明度相关的错误,尤其是ca值等方面的错误。(https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules

顺便说一句,您可以使用命令来找出 Linux 中 pdf 的版本pdfinfo myPDF.pdf

为了解决这个问题,我们必须破解pdfx软件包以设置 pdf 的正确版本。为此,我们必须再次pdfx.sty使用找到文件路径kpsewhere pdfx.sty,然后使用自己喜欢的编辑器打开它(sudo it):

sudo vim /usr/share/texlive/texmf-dist/tex/latex/pdfx/pdfx.sty

搜索该评论 - 第 750 行(版本 v1.5.84)

%% Hyperref options for PDF/A and PDF/E

并在hyperref内容之后添加以下行,同时根据您想要的 pdf 版本更改版本。

\thepdfminorversion=6  % Corresponds to version 1.6

为了更好地说明我的情况,我将其添加到第 815 行:

\ifpdfx@x
 \@ifpackageloaded{hyperref}{%
  \ifxetex
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@xetex}
  \else\ifluatex
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@luatex}
  \else
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@pdftex}
  \fi\fi
 }{%
  \ifxetex
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@xetex]{hyperref}
  \else\ifluatex
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@luatex]{hyperref}
  \else
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@pdftex]{hyperref}
  \fi\fi
 }%
\else
 \ifpdfx@e
  \@ifpackageloaded{hyperref}{%
   \ifxetex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}
   \else\ifluatex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}
   \else
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}
   \fi\fi
  }{%
   \ifxetex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
   \else\ifluatex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
   \else
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
   \fi\fi
  }%
 \else % generating PDF/A or ...
  \@ifpackageloaded{hyperref}{%
   \ifxetex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}%
   \else\ifluatex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}%
   \else
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}%
   \fi\fi
  }{%
   \ifxetex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
   \else\ifluatex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
   \else
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
   \fi\fi
 }%
\fi\fi
\hypersetup{pdfencoding=auto}%  unicode
\expandafter\ifx\csname KV@Hyp@psdextra\endcsname\relax\else
 \hypersetup{psdextra}
\fi
\thepdfminorversion=6  % Corresponds to version 1.6

之后保存文件并更新 TeX 环境:sudo texhash。完成。现在重新编译你的 pdf,你将获得所需的 pdf 版本(用于pdfinfo检查)。使用Acrobat Pro -> preflightPDF/A 文件重新检查 pdf 后,我很高兴。对于该veraPDF工具,我仍然收到 1 个与字体程序相关的错误Rule 6.3.4-1https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-634-1),但我不知道它告诉我什么。欢迎任何评论。

在此处输入图片描述


pdfx包裹

在我对这个包进行调查时,pdfx我发现作者有很多可能的选项,但这些选项没有在文档中列出。但是,这些选项不会影响任何东西(据我所知);例如,pdf16应该将 pdf 版本更改为 1.6 的选项。但是,我意识到hyperref上面给出的代码片段是变量\thepdfminorversion无论如何都会更改为 4 的部分。我把它写给了创作者,希望得到一些反馈——也许你们中的一个也感兴趣,可以找出更多(我不太熟悉 LaTeX 语法)。


veraPDF

只需对此做几点说明veraPDF application

preflight我根据错误的 PDF 版本和 LaTeX 的输出获得了有关 PDF 版本的想法,其中 LaTeX 用我的图片说明了版本 1.4 和 1.5 的一些内容。

抱歉,现在答案很长,但也许有人可以从中获得一些新信息并解决问题。如果我收到创作者的任何反馈,我会发表评论

最后:pdfx现在对我的博士论文来说效果很好。感谢大家的评论,当然,如果你使用,lualatex我想你可以使用 RobtAll 解释的方式。很棒的论坛,很棒的人!谢谢 Tobi


pdfx修补

现在我正与 Ross Moore 联系,他给我发了一些比我的修复更合适的补丁。它现在还没有更新到官方存储库,所以我在这里分享它。

https://Holzmann-cfd.com/forums/pdfx.sty

相关内容