为 PDF 添加导航目录
PDF 是一种使用起来很方便的文件格式,有很多电子书就是使用的这种格式。但是, 有些 PDF 格式电子书却因为部头大、没有目录导航而使用起来不方便。这种情况我 就遇到了——600 多页的书,没有内置的导航目录,翻找只能通过拖动边栏滚动条, 使用不方便。于是,我就想通过添加导航目录来方便使用。
添加导航目录时可以的,一种方式是通过专用软软件来添加,这些软件基本都是商业 软件,需要购买才能使用;另一种方式就是通过开源软件方式自行添加。我当然是要 使用这后一种方式了。
这里要用到的开源软件是——PDFtk, 这个软件很好用,其非 Windows 版本——PDFtk Server 是开源的。通过该软件可以方 便的拆分、合并、旋转、加密解密 PDF 文件等,这里我们要用的是管理元数据功能。 简单的说就是通过将 PDF 元数据导出、然后修改添加目录、再更新就可以为原来的 PDF 文件添加目录:
- 导出 PDF 文件的元数据。
pdftk in.pdf dump_data output info.txt
上面命令中最后的 info.txt 就是导出的元数据文件。
- 打开元数据文件,在元数据中找到如下的行
BookmarkBegin BookmarkTitle: 第一章 BookmarkLevel: 1 BookmarkPageNumber: 11
这就是一条导航目录的数据。如果没有找到,就在第一个
PageMediaBegin
之前增加 这样的四行,然后继续按照这个模式添加目录,直到结束。 - 修改好元数据文件后,保存,然后为 PDF 文件更新元数据:
pdftk in.pdf update_info info.txt output out.pdf
上面命令中,最后的 out.pdf 就是我们修改后有了目录导航元数据的 PDF 文件。
我在修改时,因为目录很多,所以我先是通过编辑一个 markdown 格式的目录文件,如下:
# 绪论 1
# 第一章 5
## 第一节 5
## 第二节 15
# 第二章 26
## 第一节 26
## 第二节 45
## 第三节 56
# 跋 66
根据前面的四行式元数据格式,我们知道:
- BookmarkBegin: 是一条导航目录的开始标志
- BookmarkTitle: 导航目录的标题
- BookmarkLevel: 导航目录的层级
- BookmarkPageNumber: 导航目录在 PDF 文件中的实际页数
这里面设计师修改的就是后三个标记,所以我们的 markdown 格式目录也是分三段标记:
- 前面的“#”的个数表示层级;
- 最后的数字表示页数;
- 去掉前面的“#”和后面的页数剩下的数据就是标题,这里的标题可以包含空格等, 可以写成“第一章 概述”这样的格式;
如果目录数据非常多,可以通过程序将上面的目录转为前面的四行式元数据,导入元 数据文件,就省事多了。