是否可以在 PDF 中嵌入可滚动框架?

是否可以在 PDF 中嵌入可滚动框架?

(这是一个年底的疯狂问题)

是否可以在 PDF 中嵌入 (可滚动) 框架或 PDF?如果可以,如何在 (pdf)LaTeX 中实现?

这在 HTML 中很常见(例如参见http://www.echoecho.com/htmlframes01.htm)这是一个网页带有 PDF 框架https://www.cs.tut.fi/~jkorpela/html/iframe-pdf.html

这是一个伪造的截图,这样你就明白了。

欢迎提供便携式和非便携式(例如仅限 Acrobat)的答案。 假框架


框架下方向下箭头的示例。向上箭头可以位于框架顶部,三角形指向上方。

向下箭头

答案1

基于animate包的垂直滚动;命令的定义\smoothScroll取自早期的邮政稍作修改。

作为示例文档,我们选取lppl.pdf​​了TEXMF/doc/latex/base/lppl.pdf其中略微经过修剪的页面。

更新 并采纳了以下建议:


通过单击“小部件”开始自动滚动,在“小部件”中按下鼠标时暂停自动滚动(并将鼠标移出,同时保持按下状态)。

单击“小部件”上方和下方的按钮即可浏览文档。

[Shift]+单击按钮可后退至文档顶部或跳至文档底部。


需要 Adob​​e Reader。打开 ↗分享LaTeX

在此处输入图片描述

\documentclass[a5paper]{scrartcl}

\usepackage{multido}
\usepackage{graphicx}
\usepackage{MnSymbol} % \triangle, \triangledown
\usepackage{animate}
\usepackage{media9}   % \mediabutton
\usepackage{xsavebox} % \xsbox{<xsbox id>}{<content>} , \the<xsbox id>

%%%%%%% docToBox  %%%%%%%%
\newcommand\docToBox[3]{%
  % #1 <file name (PDF)>
  % #2 <left> <bot> <right> <top> % trim pages by given amounts (PS points)
  % #3 <boxnum>
  \pdfximage{#1}%  just for counting pages
  \multido{\i=1+1}{\pdflastximagepages}{%
    \global\setbox#3=\vbox{%
      \box#3%
      \hbox to \textwidth{\includegraphics[page=\i,trim=#2,clip,width=\textwidth]{#1}}%
    }%
  }%  
}
%%%%%%% /docToBox %%%%%%%%

%%%%%%% smoothScroll %%%%%
\newcommand\smoothScroll[5][]{%
  % [#1] autoplay, controls, ... (see: texdoc animate)
  % #2 <boxnum>
  % #3 <viewport height>
  % #4 <steps>
  % #5 <steps per sec> while playing; >25 doesn't make sense
  \edef\mywd{\the\wd#2}%
  \edef\myht{\the\ht#2}%
  \edef\mytht{\the\dimexpr\ht#2+\dp#2\relax}%
  \xsbox{XFormOfDoc}{\usebox{#2}}% distill box into re-usable PDF XObject
  \edef\portht{\the\dimexpr#3\relax}%
  \begin{animateinline}[#1,width=\mywd,height=\portht]{#5}%
    \multiframe{#4}{
      dRaiseLen=\the\dimexpr-\myht+\portht\relax+\the\dimexpr(\mytht-\portht)/#4\relax
    }{%
      \begin{minipage}[b][\portht][b]{\mywd}%
        \raisebox{\dRaiseLen}[0pt][0pt]{\theXFormOfDoc}%
      \end{minipage}%
    }%
  \end{animateinline}%
}
%%%%%%% /smoothScroll %%%%%

\begin{document}\Huge

\newbox\lipsumbox
%load the document with trims into save-box
\docToBox{lppl.pdf}{131 110 115 121}{\lipsumbox}
\edef\boxwidth{\the\wd\lipsumbox}% 

\noindent Before you consider using \LaTeX, read the fine-print:\\
\noindent\mediabutton[
  jsaction={
    if(event.shift){anim.lppl.pause();anim.lppl.frameNum=0;}
    else try{anim.lppl.frameNum--}catch(e){}
  }
]{\fboxsep=0pt\framebox[\boxwidth][c]{\tiny\strut$\triangle\triangle\triangle$}}
%the scrolling widget
\noindent{\fboxsep=-\fboxrule\fbox{\smoothScroll[label=lppl]{\lipsumbox}{0.79\textheight}{512}{25}}}
\vskip -0.8\baselineskip
\noindent\mediabutton[
  jsaction={
    if(event.shift){anim.lppl.pause();anim.lppl.frameNum=anim.lppl.numFrames-1;}
    else try{anim.lppl.frameNum++}catch(e){}
  }
]{\fboxsep=0pt\framebox[\boxwidth][c]{\tiny\strut$\triangledown\triangledown\triangledown$}}%

\end{document}

相关内容