使用 pdflatex 等注入 JavaScript 以实现页面级事件

使用 pdflatex 等注入 JavaScript 以实现页面级事件

我正在对通过 pdflatex 生成的 PDF 文档中的 JavaScript 进行一些实验。

我想知道是否有一种方法可以访问 Adob​​e Acrobat 或 Acrobat Reader 的事件处理程序,以便不仅在表单内而且在页面级别对某些事件做出反应。

虽然这对于提高生产效率来说不是一个有用的例子,但是如何才能将 JavaScript 代码应用到一个.tex文件中,每次在 Acrobat Reader(或其他 PDF 查看器,如果适用)中查看(新)页面时播放声音呢?这与页面级别事件有关Page Open/Close

我知道,这对我(和其他人来说)来说就像是一种玩具职业,但对其他用户来说也许也很重要。

Adobe 提供的各种有关 JavaScript 的文档没有提供任何线索,除非直接使用 Adob​​e Acrobat (;-)),但是必须购买。

答案1

PDF 中的页面对象监听页面打开(/O)和关闭(/C)事件。

以下是将 JavaScript 操作 () 与这些事件结合使用的示例/S/JavaScript。需要最新media9版本和 Adob​​e Reader X:

\documentclass{beamer}
\usepackage{media9}

%%%%%%%%% adjust this %%%%%%%%%%
\def\soundfile{sound_sample.mp3}
%%%%%%%% /adjust this %%%%%%%%%%

\pdfpageattr{/AA << %additional actions for pages
  %on every page open event, call ActionScript method 'play' exposed by APlayer.swf
  /O << /S/JavaScript /JS (annotRM['my_sound'].callAS('play');) >>
  %do something else on every page close event
  /C << /S/JavaScript /JS (app.alert('Page '+ this.pageNum + ' is being left.');) >>
>>}

\begin{document}

\begin{frame}{first frame \includemedia[
  label=my_sound,
  width=1ex, height=1ex,
  transparent,
  activate=pageopen, deactivate=onclick,
  addresource=\soundfile,
  flashvars={
    source=\soundfile
   &hideBar=true
  },
]{}{APlayer.swf}}
\dots
\end{frame}

\begin{frame}{other frame}
\dots
\end{frame}

\begin{frame}{yet another frame}
\dots
\end{frame}

\end{document}

相关内容