![如何使用 OCG/圖層反轉 PDF?](https://rvso.com/image/281467/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20OCG%2F%E5%9C%96%E5%B1%A4%E5%8F%8D%E8%BD%89%20PDF%EF%BC%9F.png)
我正在創建一個 PDF,專為在螢幕/平板電腦上查看而設計,並在黑色背景上使用白色文字。由於有些讀者可能想要列印它,並且我想避免創建第二個 PDF,因此我想在 PDF 中包含一個列印視圖作為圖層。
我怎麼才能使(xe)乳膠渲染相同的文字兩次,中間有一個背景圖像,這樣我就可以使用上面的文字圖層和圖像作為一個PDF層來禁用它?
因此,在 PDF 中,圖層順序如下(從下到上閱讀):
WHITE TEXT \
> OCG Layer #1
BLACK BACKGROUND /
BLACK TEXT \
> regular PDF
WHITE BACKGROUND /
現在,如果閱讀器在 PDF 閱讀器中隱藏第 1 層,則其下方的列印友善版本將變得可見。
答案1
此範例產生兩個不同版本的易於排版的頁面框,並將它們放置在單獨的 OCG 層上。
這兩層都會新增到「反向影片」單選按鈕組中,以確保一次只能啟用其中一層。
此外,我們禁止列印黑白版本,以防止用戶意外浪費寶貴的墨水。 (儘管只有 AcroRead 和 Chrome/Chromium 內建 PDF 檢視器可以保證這一點。)
此範例需要相當新且最新的 TeX 安裝,例如 TeXLive-2020:
\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{ocgx2} %pdf layers
\usepackage{color}
\makeatletter
%make a copy from each ready page and repeat it with white
%textcolour on black background, put both versions on different layers
\AddToHook{shipout/before}{%
\setbox\ShipoutBox=\hbox{%
%normal & print layer
\begin{ocg}[
radiobtngrp=reverse video,
printocg=always,
]{normal and print}{normal}{off}%
\makebox[0pt][l]{%
\raisebox{1in}{\copy\ShipoutBox}%
}%
\end{ocg}%
%layer for tablets & screens
\begin{ocg}[
radiobtngrp=reverse video,
printocg=never,
]{for screens/tablets}{tablets}{on}%
\makebox[0pt][l]{%
\hspace{-1in}%
\raisebox{0pt}[\dimexpr\height-1in\relax]{%
\rule{\paperwidth}{\paperheight}}}%
\raisebox{1in}{{\color{white}\box\ShipoutBox}}%
\end{ocg}%
}%
}
\def\redefFooterAndHeader{%
%proof of concept: --> repeat the following with
%\@evenfoot, \@oddhead, \@evenhead
\let\@oddfootOrig\@oddfoot%
\gdef\@oddfoot{%
\makebox[\textwidth][c]{%
\begin{ocg}[
radiobtngrp=reverse video,
printocg=always,
]{normal and print}{normal}{off}%
\makebox[0pt][c]{\@oddfootOrig}%
\end{ocg}%
\begin{ocg}[
radiobtngrp=reverse video,
printocg=never,
]{for screens/tablets}{tablets}{on}%
\makebox[0pt][c]{{\color{white}\@oddfootOrig}}%
\end{ocg}%
}%
}%
}
\let\pagestyleOrig\pagestyle
\def\pagestyle#1{\pagestyleOrig{#1}\redefFooterAndHeader}%
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}\pagestyle{plain}
\kant[1-6]
\end{document}