Como inverter um PDF usando OCG/Layers?

Como inverter um PDF usando OCG/Layers?

Estou criando um PDF projetado para visualização em telas/tablets e que usa texto branco sobre fundo preto. Como alguns leitores podem querer imprimi-lo e eu quero evitar a criação de um segundo PDF, gostaria de incluir uma visualização de impressão como camada no PDF.

Como posso fazer com que o (xe)latex renderize o mesmo texto duas vezes acima um do outro, com uma imagem de fundo no meio, para que eu possa usar a camada de texto superior e a imagem como uma camada de PDF para desativá-la?

Portanto, no PDF, seria a seguinte ordem de camadas (leia de baixo para cima):

WHITE TEXT       \
                  > OCG Layer #1
BLACK BACKGROUND /

BLACK TEXT       \
                  > regular PDF
WHITE BACKGROUND /

Agora, se o leitor ocultar a camada 1 no leitor de PDF, a versão para impressão abaixo dela ficará visível.

Responder1

Este exemplo produz duas versões diferentes da caixa de página prontamente composta e as coloca em camadas OCG separadas.

Ambas as camadas são adicionadas ao grupo de botões de opção "vídeo reverso" para garantir que apenas uma delas possa ser habilitada por vez.

Além disso, proibimos a impressão da versão branco sobre preto para evitar que o usuário desperdice acidentalmente tinta preciosa. (Embora apenas o AcroRead e o visualizador de PDF integrado do Chrome/Chromium garantam isso.)

Este exemplo requer uma instalação TeX relativamente nova e atualizada, por exemplo, 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}

insira a descrição da imagem aqui

informação relacionada