모든 문서 상호 작용 비활성화(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에 포함되지 않게 됩니다. 효과: 상호 작용과 관련된 오류는 없지만 문서는 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 파일에 메타데이터를 계속 포함할 수 있습니다. 북마크를 비활성화하면 질문에 표시된 것과 동일한 유효성 검사 오류가 발생하므로 북마크를 비활성화해야 합니다.

관련 정보