
私は、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 に文書の変更日、タイトル、トラップされたキーが含まれなくなります。影響: インタラクティビティに関するエラーはありませんが、hypersetup
メタデータを含める必要があるため、文書は依然として PDF/X-1a:2001 に準拠していません。
作業を継続しながら、ドキュメント内のすべてのインタラクティブ機能を完全に無効にするにはどうすればよいでしょうか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 ファイルにメタデータを含めることができます。ブックマークが存在すると、質問に示されているのと同じ検証エラーが発生するため、ブックマークを無効にすることは必須です。