禁用所有文档交互性(以符合 PDF/X 规范)

禁用所有文档交互性(以符合 PDF/X 规范)

我正在努力使我的 XeLaTeX 编译的 PDF 文件符合 PDF/X-1a:2001 标准。

当我使用这个答案使用 TeXLive 2015,文档可以完全验证(在 Acrobat Pro DC 中)。但是,当我在实际文档(包括章节、目录和其他交互内容)上测试相同的解决方案时,我收到错误。

我使用以下代码编译了代码xelatex -output-driver="xdvipdfmx -V 3" pdfx.tex

\documentclass{book}
\usepackage{atbegshi}
\AtBeginShipout{
    \special{pdf: put @thispage
      <<
        /TrimBox [0 0 210.990 162.086]
      >>
    }
}
\special{pdf: put @thispage
  <<
    /TrimBox [0 0 210.990 162.086]
  >>
}
\special{pdf:docinfo
  <<
    /GTS_PDFXVersion (PDF/X-1:2001)
    /GTS_PDFXConformance (PDF/X-1a:2001)
  >>
}

\special{pdf:put @catalog
<<
  /PageMode /UseNone
  /OutputIntents [
    <<
      /Info (none)
      /Type /OutputIntent
      /S /GTS_PDFX
      /OutputConditionIdentifier (Custom)
      /RegistryName (http://www.color.org/)
    >>
  ]
>>
}%

\usepackage{datetime}
\usepackage{hyperref}
\hypersetup{% 
    pdftitle={Title},
    pdfinfo={
        ModDate={D:\pdfdate},
        Trapped={False},      
   },
}


\begin{document}
\chapter{Some chapter}
\chapter{Some chapter}
\chapter{Some chapter}
\chapter{Some chapter}
\end{document}

并导致 PDF 验证在 Acrobat 中输出“文档包含操作”错误:

PDF“操作”错误

我测试的一些文档也抛出了以下错误:“页面区域内的注释”,它指向使用命令生成的目录\tableofcontents和使用\hyperlink命令生成的内部链接。(超链接在文档中,因为生成交互式文档和打印版本基本上使用相同的源。)

所以问题在于文档的交互性。

我尝试通过更改来禁用它

\usepackage{hyperref}

\usepackage[draft]{hyperref}

但这不仅会禁用由 添加的交互性hyperref,还会跳过hypersetup,从而导致文档修改日期、标题和捕获密钥不包含在编译的 PDF 中。效果:没有关于交互性的错误,但文档仍然不符合 PDF/X-1a:2001,因为它需要hypersetup包含元数据。

如何在仍能进行hypersetup工作的同时完全禁用文档中的所有交互性?

理论上,我可以重新定义/覆盖所有“交互式”hyperref命令以及所有使用交互性的自定义命令(在序言的最末尾,以便覆盖所有早期的定义):


\def \hyperlink#1#2{#2}
\def \href#1#2{#2}
\def \url#1{#1}
\begin{document}

但:

  • 我不确定如何才能禁用交互性\pageref而不丢失文档中的页码
  • 这种方法非常特定于文档,因为它需要检查交互性究竟在哪里添加以及通过哪些命令添加
  • 虽然它对我测试过的一些文档有效,但对于上面的 MWE 却不起作用。

有没有更直接/通用的方法来禁用整个文档中的交互性?

答案1

NoHyper环境可能会满足您的要求:在其范围内,大多数hyperref功能都被禁用,方法是重新定义用于生成链接的内部宏,hyperref使它们不执行任何操作。但是,与draft包选项相反,它不会停用书签的创建、文档信息的包含等。

通常,你会将文档中想要禁用链接的部分括起来

\begin{NoHyper}
    ...
\end{NoHyper}

在这种情况下,由于您想避免整个文档中的链接,因此可能更容易替换

\usepackage{hyperref}

在你的例子中

\usepackage[bookmarks=false]{hyperref}
\NoHyper

全局禁用链接和书签,同时仍能在 PDF 文件中包含元数据。禁用书签是必需的,因为它们的存在会触发问题中显示的相同验证错误。

相关内容