![Wie invertiert man eine PDF-Datei mit OCG/Layers?](https://rvso.com/image/281467/Wie%20invertiert%20man%20eine%20PDF-Datei%20mit%20OCG%2FLayers%3F.png)
Ich erstelle ein PDF, das für die Anzeige auf Bildschirmen/Tablets konzipiert ist und weißen Text auf schwarzem Hintergrund verwendet. Da einige Leser es möglicherweise ausdrucken möchten und ich vermeiden möchte, ein zweites PDF zu erstellen, möchte ich eine Druckansicht als Ebene in das PDF einfügen.
Wie kann ich (xe)latex dazu bringen, denselben Text zweimal übereinander darzustellen, mit einem Hintergrundbild dazwischen, sodass ich die obere Textebene und das Bild als eine PDF-Ebene verwenden kann, um es zu deaktivieren?
Im PDF wäre die Ebenenreihenfolge also wie folgt (von unten nach oben lesen):
WHITE TEXT \
> OCG Layer #1
BLACK BACKGROUND /
BLACK TEXT \
> regular PDF
WHITE BACKGROUND /
Wenn der Reader jetzt Ebene Nr. 1 im PDF-Reader ausblendet, wird die druckerfreundliche Version darunter sichtbar.
Antwort1
Dieses Beispiel erstellt zwei unterschiedliche Versionen des fertig gesetzten Seitenrahmens und platziert sie auf separaten OCG-Ebenen.
Um sicherzustellen, dass immer nur eine davon gleichzeitig aktiviert werden kann, werden beide Ebenen der Optionsfeldgruppe „Video umkehren“ hinzugefügt.
Darüber hinaus verbieten wir den Ausdruck der Weiß-auf-Schwarz-Version, um zu verhindern, dass der Benutzer versehentlich wertvolle Tinte verschwendet. (Allerdings ist dies nur bei AcroRead und dem in Chrome/Chromium integrierten PDF-Viewer möglich.)
Dieses Beispiel erfordert eine relativ neue und aktuelle TeX-Installation, zB 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}