[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