简介
当你辛辛苦苦地从网上搜到了 pdf 资源,准备开始无纸化学习的时候。突然发现搜到的 pdf 竟然没有目录。当需要跳转到其他章节的时候只能凭感觉乱翻。阅读这种没有目录的 pdf 非常影响使用体验。而当你想要手动编辑目录时你会发现,很多 pdf 阅读器是没有目录编辑功能的。即使是手动给 pdf 添加书签也很不方便。
为解决这个问题,我用 python 写了一个基于 pikepdf 的命令行 pdf 目录编辑器。从此只要一条命令就能将目录添加到 pdf 中。有了自己编辑目录的能力之后再去阅读 pdf 无疑会方便很多。
介绍
项目网址: pdf-outline。
项目特性:
- 类型提示友好。
- 业务代码简单清晰。不用那些会让代码变得像被混淆过似的“高级技巧”。
- 核心功能维护测试。确保功能可用。
- 有 Dockefile 和 Makefile 这种 “贼有意思的” 小功能。
使用
-
克隆并打开项目目录。在项目路径下创建 data 目录。
-
把待处理的 pdf 复制 到 data 目录下并重命名为 "原文件.pdf".
-
手动提取 pdf 的目录页内容。处理成下图的格式后保存到 “目录.txt” 中。
-
配置工程依赖环境。可以用 docker compose 或 venv 进行环境管理。相关命令都写在 Makefile 中。
-
执行
python main.py -o offset生成结果文件。其中 offset 为目录第 1 页的 pdf 的页号。"项目路径/data/结果.pdf" 即为修改后的 pdf 文件。
问题
pikepdf 目前还不支持 m 系列处理器的 mac。但可以通过 docker + vscode 容器开发的形式绕过这个限制。
Q&A
-
为什么我觉得我的目录文件格式没有错误。但还是会报错?
目录文件分隔符要求使用制表符。而有的文本编辑器会将 tab 转换为 4 个空格。用文本替换功能替换回来即可。
-
为什么打开生成的 pdf 后发现目录与实际的页数并不匹配?
因为存在封面以及目录页。pdf 的第 1 页并不代表目录上的第 1 页。需要手动添加偏移量来修正这个问题。
-
我如何处理”目录“页的导航?
目录文件的目录页号支持负数。只要手动算一下页号就行了。
-
为什么有些 pdf 在电脑上可以显示目录,在平板上却无法显示?
这多半是因为 pdf 目录的格式错了。可以先将 pdf 目录读取出来。手动修改后再写回原文件中。