
我正在努力使我的 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 中輸出「文件包含操作」錯誤:
我測試的一些文件也會拋出以下錯誤:“頁面區域內的註釋”,它指向使用命令生成的目錄\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 文件中包含元資料。停用書籤是一項要求,因為它們的存在將觸發問題中顯示的相同驗證錯誤。