cpdf : 利用cpdf为PDF添加书签(目录)

声明:本文参考博客园[ssh_alitheia] MacOS下给pdf添加书签(目录)

原文链接https://www.cnblogs.com/shanchuan/p/13457426.html

因为淘宝买的很多扫描版电子书都没有标签,放在marginNote里看翻页的时候真的很窒息,没想到有个这么好用的命令行工具,啊我只能说命令行工具永远的神。

1.安装Coherent PDF Command Line Tools

在其首页就有“Download binaries now for Windows, Mac, or Linux”字样,下载压缩包解压用里面的二进制文件就行。macOS环境下用的是/cpdf-binaries-master/OSX-Intel/cpdf这个文件。直接双击运行的话一如既往的苹果又会拦截一下,要手动允许执行。

  • Tipssudo spctl --master-disable 这个命令可以一劳永逸的关掉MacOS的拦截- - 允许任何来源的应用运行。不过我还是没用。

我把可执行文件放在了 /usr/local/bin下,这个目录是我的$PATH之一,这样bash就能找到cpdf命令了

2.导出原有书签

cpdf -list-bookmarks in.pdf > bookmarks.txt

加上-utf8就可以导出中文书签

导出内容类似这样:

 0 "contents" 2 open
 0 "part1 summary" 6 "[6/Fit]"
 1 "1.1 " 8 "[8/Fit]"

第一列即层级,0代表顶层。第二列为目录类容。第三列为所在页码(page=0则点击不会发生跳转)。第四列为格式(format=open表示该层级可以展开),不写就是默认的。

3.编辑自己的目录

我本来是直接用vim在手动录入的,但是突然发现还是直接到表格里输入比较舒服。因为可以很方便的切换单元格。最后输入完了再保存成csv格式,用vim, sed, awk处理一下变成上面的标准格式就好。页码的部分可以直接跟着PDF的目录打(书的页码),然后统一 +n 对应到文件的页码就好了。

4.格式化处理部分

#删除第三列的类容 即原始页码
awk -F ',' '{$3="";print $0}' mybooklable > formatlable #重定向直接覆盖mybooklable之后 文件内容就没了,很迷惑。所以定向给新文件
:%s/ $//g #删除末尾空格
:%s/ \+/ /g #多个连续空格修改为一个空格
:%s/^[0-9] /&"/g #补充目录名(第二字段)开头的引号
:%s/ [0-9]/"&/g #补充目录名(第二字段)结尾的引号

#补充
:%s/,$//g #删除csv文件末尾多余的分隔符
:%s/,/ /g #分隔符由,改%s为空格

5.导入书签

cpdf -add-bookmarks bookmarks.txt test.pdf -o test.pdf

我这里直接对原文件覆盖了,使用preview打开并不会导致冲突,执行完成后preview会自动刷新目录。

PS:讲实话 手敲目录好累啊。即使是我只敲了二级目录也很累。

上一篇:BigDecimal - Java精确运算


下一篇:通过模板导出word