[pdftex] layer-based presentations

The Thanh Han hanthethanh at myrealbox.com
Mon Nov 8 15:05:33 CET 2004


Sounds very interesting, unfortunately I don't have acrobat reader to
enjoy it, since AR is not avail for the platform I am using (linux on
powerpc). Sigh.

Thanh

On Sun, Nov 07, 2004 at 02:04:46PM +0100, Pawel Jackowski wrote:
> CV Radhakrishnan wrote:
> 
> >I am interested in it very much.
> >
> >Thanks in advance.
> 
> Hi,
> 
> the attached file contains generic sample (pdfeTeX) and result pdf file 
> with log. eTeX features are not essential but convenient in this case. I 
> don't have an alfa-implementation already. Working on it.
> 
> Best regards, Pawel
> 
> 

> This is pdfeTeXk, Version 3.141592-1.11a-2.1 (Web2c 7.5.2) (format=pdfetex 2003.10.28)  7 NOV 2004 13:58
> entering extended mode
> \write18 enabled.
>  %&-line parsing enabled.
>  (d:/TeX/texmf/web2c/cp8bit.tcx)
> **lay-nav.tex
> (./lay-nav.tex{d:/TeX/texmf/pdftex/config/pdftex.cfg} [1{d:/TeX/texmf/fonts/map
> /pdftex/updmap/pdftex.map}] [2] ){d:/TeX/texmf/dvips/tetex/f7b6d320.enc}<d:/TeX
> /texmf/fonts/type1/bluesky/cm/cmr10.pfb><d:/TeX/texmf/fonts/type1/bluesky/cm/cm
> bx10.pfb>
> Output written on lay-nav.pdf (2 pages, 20151 bytes).


> 
> % to see what happens
> 
> \pdfcompresslevel=0
> \pdfpagewidth=10cm
> \pdfpageheight=10cm
> \pdfhorigin=1cm
> \pdfvorigin=1cm
> \hsize=8cm
> \vsize=8cm
> 
> % handy macros
> 
> \def\obj{\immediate\pdfobj}
> 
> \def\objref#1{\space\expandafter\doobjref\number#1\relax}
> \def\doobjref#1\relax{#1 0 R}
> 
> \def\objrefs#1{%
>  \ifx#1\relax
>   \space
>  \else
>   \objref{#1}\expandafter\objrefs
>  \fi}
> 
> \def\lastobjref{\objref\pdflastobj}
> \def\thisobjref{\objref{\numexpr\pdflastobj+1\relax}}
> \def\nextobjref{\objref{\numexpr\pdflastobj+2\relax}} % eTeX needed
> 
> % lets make 3 layers
> 
> \def\openlayer{ BDC}
> \def\closelayer{ EMC}
> 
> \obj{<< /Type /OCG /Name (Issue 1) >>}
> \def\onercname{/OC1}             % resource name
> \edef\oneobjnum{\the\pdflastobj} % object number
> \edef\one{ /OC \onercname}       % code for \pdfliteral
> 
> \obj{<< /Type /OCG /Name (Issue 2) >>}
> \def\tworcname{/OC2}
> \edef\twoobjnum{\the\pdflastobj}
> \edef\two{ /OC \tworcname}
> 
> \obj{<< /Type /OCG /Name (Issue 3) >>}
> \def\threercname{/OC3}
> \edef\threeobjnum{\the\pdflastobj}
> \edef\three{ /OC \threercname}
> 
> % we have to add layer information to page resources...
> 
> \obj{% map names to objcts
> <<
>  \onercname\space\objref\oneobjnum     \space
>  \tworcname\space\objref\twoobjnum     \space
>  \threercname\space\objref\threeobjnum \space
> >>
> }
> 
> \edef\layersnames{\lastobjref}
> 
> \edef\next{\pdfpageresources={/Properties \layersnames}}
> \next
> 
> % ... and to document catalog (layers are global!)
> 
> \edef\layersorder{\objrefs\oneobjnum\twoobjnum\threeobjnum\relax}
> \edef\layerson{\objrefs\oneobjnum\relax}
> \edef\layersoff{\objrefs\twoobjnum\threeobjnum\relax}
> 
> \obj{% layers default configuration
> <<
>  /Order [\layersorder] \space
>  /ON    [\layerson   ] \space
>  /OFF   [\layersoff  ] \space
> >>
> }
> 
> \edef\layersconfig{\lastobjref}
> 
> \pdfcatalog{%
> /OCProperties
> <<
>  /OCGs [\layersorder ]\space
>  /D     \layersconfig \space
> >>
> }
> 
> % now we can put some text on layers (Acrobat 6 needed to see layers)
> 
> {\bf Main content of the page}
> 
> \pdfliteral{\one\openlayer}
> -- layer 1
> \pdfliteral{\closelayer}
> 
> \pdfliteral{\two\openlayer}
> -- layer 2
> \pdfliteral{\closelayer}
> 
> \pdfliteral{\three\openlayer}
> -- layer 3
> \pdfliteral{\closelayer}
> 
> % \end
> 
> % now the navigation part
> 
> % example of action that affects layers
> 
> \def\togglelayers{/S /SetOCGState /State [ /Toggle \layersorder ]}
> 
> \bigskip
> \pdflinkmargin=2bp
> Test:
> \pdfstartlink
>  user{/Subtype /Link /A << \togglelayers\space >>}TogGle LaYerS!%
> \pdfendlink
> 
> % sub-page navigation works in presentation mode only,
> % so we enter fullscreen mode
> 
> \pdfcatalog{/PageMode /FullScreen}
> 
> % first we define actions to perform on user request (arrow buttons)
> 
> \obj{<<
> /S /SetOCGState
> /State [ /OFF \objrefs\oneobjnum\twoobjnum\threeobjnum\relax ]
> >>}
> 
> \edef\actionzero{\lastobjref} % all layers off
> 
> \obj{<<
> /S /SetOCGState
> /State [
>  /ON  \objrefs\oneobjnum\relax
>  /OFF \objrefs\twoobjnum\threeobjnum\relax ]
> >>}
> 
> \edef\actionone{\lastobjref}
> 
> \obj{<<
> /S /SetOCGState
> /State [
>  /ON  \objrefs\oneobjnum\twoobjnum\relax
>  /OFF \objrefs\threeobjnum\relax ]
> >>}
> 
> \edef\actiontwo{\lastobjref}
> 
> \obj{%
> <<
> /S /SetOCGState
> /State [ /ON \objrefs\oneobjnum\twoobjnum\threeobjnum\relax ]
> >>}
> 
> \edef\actionthree{\lastobjref} % all layers on
> 
> \obj{<< /S /Named /N /NextPage >>}
> 
> \edef\actionnextpage{\lastobjref}
> 
> % each page state is represented by a navigation node
> 
> \obj{% root node
> <<
>  /Type /NavNode
>  /NA   \actionone
>  /PA   \actionzero % ?
>  /Next \nextobjref
>  /Prev \thisobjref % avoid loosing current navigation node
> >>}
> 
> \edef\rootnode{\lastobjref} % for page attributes
> 
> \obj{% next
> <<
>  /NA \actiontwo    % next action
>  /PA \actionzero   % previous action
>  /Next \nextobjref % next node
>  /Prev \lastobjref % previous node (root in this case)
> >>}
> 
> \obj{% next
> <<
>  /NA \actionthree
>  /PA \actionone
>  /Next \nextobjref
>  /Prev \lastobjref
> >>}
> 
> \obj{% last node on the page
> <<
>  /NA \actionnextpage
>  /PA \actiontwo
>  /Prev \lastobjref
> >>}
> 
> \edef\next{\pdfpageattr={/PresSteps \rootnode}}
> \next
> 
> \vfill\eject
> \pdfpageattr{} % forget navigation nodes for this page
> 
> \bf
> Details in PDF 1.5 spec, chapter 8.
> 
> \end

> _______________________________________________
> pdftex mailing list
> pdftex at tug.org
> http://tug.org/mailman/listinfo/pdftex



More information about the pdftex mailing list