TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am creating a PDF that is designed for viewing on Screens/Tablets, and uses white Text on black background. Since some readers might want to print it, and I want to avoid to create a second PDF, I would like to include a Print View as Layer in the PDF.

How can I make (xe)latex to render the same Text twice above each other, with a background image in between, so I can use the upper text layer and image as one PDF-Layer to disable it?

So in the PDF, it would be the following order of layers (read it bottom-to-top):

WHITE TEXT       \
                  > OCG Layer #1
BLACK BACKGROUND /

BLACK TEXT       \
                  > regular PDF
WHITE BACKGROUND /

Now if the reader hides Layer #1 in the PDF Reader, the printerfriendly Version below it becomes visible.

share|improve this question
    
Just a minor note, most PDF viewers can invert the rendered image. Acrobat and Evince can at least. – alfC Nov 4 '15 at 18:40
    
Yes, but my situation is a bit more complex with artwork etc, so it is more than "just" inverting all colors. – TeXter Nov 6 '15 at 17:48
up vote 4 down vote accepted

This example produces two different versions of the readily typeset page box and places them on separate OCG layers.

Both layers are added to the radio button group "reverse video" to ensure that only one of them can be enabled at a time.

Moreover, we forbid the white-on-black version to be printed in order to prevent the user from accidentally wasting precious ink.

This example requires package ocgx2, v. 10 [2015/11/02].

\documentclass{article}

\usepackage[a5paper]{geometry}
\usepackage{kantlipsum}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{ocgx2}[2015/11/02] %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
\AtBeginShipout{%
  \setbox\AtBeginShipoutBox=\hbox{%
    %normal & print layer
    \begin{ocg}[
      radiobtngrp=reverse video,
      printocg=always,
    ]{normal and print}{normal}{off}%
      \makebox[0pt][l]{%
        \raisebox{1in}{\copy\AtBeginShipoutBox}%
      }%  
    \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\AtBeginShipoutBox}}%
    \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}

enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.