停用所有文件互動性(為了 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 文件中包含元資料。停用書籤是一項要求,因為它們的存在將觸發問題中顯示的相同驗證錯誤。

相關內容