![使用 pdflatex 等注入 JavaScript 以实现页面级事件](https://linux22.com/image/271378/%E4%BD%BF%E7%94%A8%20pdflatex%20%E7%AD%89%E6%B3%A8%E5%85%A5%20JavaScript%20%E4%BB%A5%E5%AE%9E%E7%8E%B0%E9%A1%B5%E9%9D%A2%E7%BA%A7%E4%BA%8B%E4%BB%B6.png)
我正在对通过 pdflatex 生成的 PDF 文档中的 JavaScript 进行一些实验。
我想知道是否有一种方法可以访问 Adobe Acrobat 或 Acrobat Reader 的事件处理程序,以便不仅在表单内而且在页面级别对某些事件做出反应。
虽然这对于提高生产效率来说不是一个有用的例子,但是如何才能将 JavaScript 代码应用到一个.tex
文件中,每次在 Acrobat Reader(或其他 PDF 查看器,如果适用)中查看(新)页面时播放声音呢?这与页面级别事件有关Page Open/Close
。
我知道,这对我(和其他人来说)来说就像是一种玩具职业,但对其他用户来说也许也很重要。
Adobe 提供的各种有关 JavaScript 的文档没有提供任何线索,除非直接使用 Adobe Acrobat (;-)),但是必须购买。
答案1
PDF 中的页面对象监听页面打开(/O
)和关闭(/C
)事件。
以下是将 JavaScript 操作 () 与这些事件结合使用的示例/S/JavaScript
。需要最新media9
版本和 Adobe 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}