.png)
Я работаю над тем, чтобы мой скомпилированный в 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
TheNoHyper
средаможет делать то, что вы ищете: в его области действия большинство hyperref
функций отключены путем переопределения внутренних макросов, hyperref
используемых для создания ссылок, так что они ничего не делают. Однако, в отличие от draft
опции пакета, он не отключает создание закладок, включение информации о документе и т. д.
Обычно вы заключаете части документа, в которых хотите отключить ссылки, в
\begin{NoHyper}
...
\end{NoHyper}
В этом случае, поскольку вы хотите избежать ссылок по всему документу, может быть проще просто заменить
\usepackage{hyperref}
в вашем примере
\usepackage[bookmarks=false]{hyperref}
\NoHyper
для отключения ссылок и закладок глобально, при этом сохраняя возможность включать метаданные в файл PDF. Отключение закладок является обязательным, так как их наличие вызовет ту же ошибку проверки, что и в вопросе.