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
这个文件。直接双击运行的话一如既往的苹果又会拦截一下,要手动允许执行。
- 【Tips】
sudo 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:讲实话 手敲目录好累啊。即使是我只敲了二级目录也很累。
标签:书签,cpdf,pdf,PDF,bookmarks,页码,目录 来源: https://www.cnblogs.com/craven1701/p/15403194.html