如何给pdf文件自动添加目录和书签?

想要直接了解步骤的朋友,请跳转到下面的“Evermap公司的AutoBookmark插件“小节。

在最近的硬盘灾难中,与积累的大批电子书一起丢失的还有我在这些资料上做的笔记和修改,这其中就包括为pdf文件手工添加的目录书签。浏览和阅读pdf格式的电子书时,目录书签的便利是无可取代的。有些制作精良的pdf文件自带目录书签,没有的就需要读者自己添加。我以前都是读到某个章节或者根据目录跳转到需要阅读的章节,在该位置手工添加书签。假如pdf是文字格式的,只需选中章节标题、复制,再点击书签栏的新建按钮,创建的书签就会具有复制的标题。假如pdf是图片格式的,就麻烦一些,需要手工输入书签标题。

我重新下载了一本重要的pdf电子书,该书只有目录,以前辛辛苦苦手工积累的几十个书签已不复存在,再次手工添加无疑令人沮丧。我想到了能否根据目录自动添加对应的书签,通过pdf工具软件或者pdf支持的JavaScript编程应该都有可能。

上网搜索的结果证实了我的推测。采用JavaScript编程理论上是可行的,但操作起来难度较大。Adobe对pdf的编程支持无论是开发环境还是文档,皆远比不上微软对Office的开发方案。官方网站上的一篇十余年前的用JavaScript创建书签的教程,说明能用代码实现的功能十分局限,只有Bookmark.createChild和Menu.execute两种途径,不能设置书签的层级、前者只能创建运行JavaScript脚本的书签,后者只能在当前位置创建书签。根据Adobe最新的pdf的JavaScript API文档,现在pdf的可编程性改进了,不过要基于目录创建书签依然不是一项简单的任务。而且Adobe的Acrobat PDF阅读器免费版是不支持运行自定义JavaScript的,支持JavaScript插件的版本收费几百美金。即使使用国内的破解版,也会发现其JavaScript的编辑环境简陋得令人震惊——仅有一个文本框。

工具方面,开发了广为流行的Foxit PDF阅读器的Foxit公司的debenu子公司有一款Aerialist产品,根据网站上的介绍能够自动创建书签。该软件的售价同样高达几百美金,幸好有个免费试用版。网站要求输入用户名、邮箱和电话等信息才能下载试用版,这本来很正常,然而精明的debenu公司为了确保用户来自企业,要求邮箱是企业邮箱而非163、Gmail等公用的个人邮箱,杜撰一个企业邮箱地址通过验证后,网页提示下载链接已经发往该邮箱。

Evermap公司的AutoBookmark插件

该插件的介绍(https://www.evermap.com/autobookmark.asp#StartBookmarks)令人心动,列明具备从目录创建书签的功能。个人用户的版本也要200多美金,让我们下载30天试用版一探究竟。

依据菜单的文字,选择Bookmarks\Bookmark table of contents,提示要先选中目录,如果需要更精确的控制,可以使用Bookmarks\Bookmark words from list菜单项。于是调用该命令,根据弹出的对话框的提示,将要为其创建书签的目录项粘贴到文本框中,勾选若干选项,运行。结果是创建的书签指向了目录页面,原因也不奇怪,该功能是根据文本在pdf中搜索,在某个位置找到后便创建指向该位置的书签,目录中的文本当然是首先被找到的。

我希望利用的是目录中的页码,遂回过头使用Bookmark table of contents命令,选中部分目录试验,效果非常好。缺点有两条,一是创建的书签位于同一层级,没有按照目录那样分层;二是跳转到的页面都缩小到不合适的比例。第一个问题只能手工解决,通过剪切书签,再粘贴到某个书签下面或后面,来创建正确的层级。第二个问题经过猜测和试验可以利用Bookmarks\Modify bookmarks\Set zoom types菜单项来解决,在弹出的对话框中,将页面的伸缩类型设为默认的Inherited,运行后所有书签打开的页面都将使用用户设置的伸缩比例。

如何自动创建目录?

目录虽然在电子阅读器中不像书签那样方便,但作为文件的一部分,有些读者还是有需求的,特别是在打印成纸质件的场景中。在Word中,可以利用文档中的标题自动创建目录。通用的pdf阅读器没有这样的功能,变通的方法是先将pdf转换成word文档,生成目录后再转换回pdf文件。

另外,如果已经有指向各章节的书签,上面介绍的AutoBookmark插件有Table of contents\Create TOC from bookmarks的功能。

你可能感兴趣的:(编程与IT,PDF,书签)