前言

  1. 获取pdf目录:主要场景是为了拿到目录信息做编辑,从pdf软件里面一个个复制那肯定费时费力。
  2. 设置pdf目录:主要场景,扫描文件或拍多张照片等制作的pdf文件是没有目录。还有就是网上很多扫描版的pdf加上目录很方便。

工具

在网上搜索一波,找到了【pdf-toc】这个命令行工具,可以实现获取pdf目录,以及设置pdf目录。
感觉很方便,只是需要python >= 3.6的环境,然后执行pip install pdf-toc进行安装。该命令行的帮助文档如下:

pdf-toc -husage: pdf-toc [-h] [--version] [--show-toc {json,toc}] [-t TOC] [-d DEST]               [-T {json,toc}] [-f] [-m]               source pdf ToC modifier. positional arguments:  source                source pdf file directory optional arguments:  -h, --help            show this help message and exit  --version             show program's version number and exit  --show-toc {json,toc}                        print the toc info of the source file and exit  -t TOC, --toc TOC     toc info used to embed in the result file. leave it                        empty to read toc from stdin  -d DEST, --dest DEST  destination directory for result file  -T {json,toc}, --type {json,toc}                        specify format of ToC file. leave it empty to let the                        tool determine the format, (from file suffix)  -f, --force           overwrite dist file if it exist  -m, --modify          modified the original file instead of create a new one

获取pdf目录

获取toc格式目录

执行命令pdf-toc --show-toc toc MongoDB_dst.pdf可以得到简单的文本目录格式。
下面只截取部分目录信息,可以看到结构为【缩进 + 目录名 + 空格 + 页码】,前面的缩进一般为4个空格,为4的倍数表示第几级目录。
该方式适用于得到要修改的目录,因为后面设置目录可以用下面这种格式的文件。

目录    14第一部分 MongoDB介绍    24    第1章 MongoDB简介    26        1.1 易于使用    26        1.2 易于扩展    27        1.3 丰富的功能    27        1.4 卓越的性能    28        1.5 小结    28    第2章 MongoDB基础知识    30        2.1 文档    30        2.2 集合    31            2.2.1 动态模式    31            2.2.2 命名    32        2.3 数据库    33        2.4 启动MongoDB    34        2.5 MongoDB shell简介    35

获取json格式目录

执行命令pdf-toc --show-toc json MongoDB_dst.pdf可以得到简单的文本目录格式。
下面只截取部分目录信息,可以看到结构为【目录等级 + 目录名 + 页码 + 种类信息】。
该方式得到的数据最适合用来写代码解析拿去为所欲为。

[    [1, "目录   ", 14, {"kind": 1, "xref": 0, "page": 13, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [1, "第一部分 MongoDB介绍   ", 24, {"kind": 1, "xref": 0, "page": 23, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [2, "第1章 MongoDB简介   ", 26, {"kind": 1, "xref": 0, "page": 25, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "1.1 易于使用   ", 26, {"kind": 1, "xref": 0, "page": 25, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "1.2 易于扩展   ", 27, {"kind": 1, "xref": 0, "page": 26, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "1.3 丰富的功能   ", 27, {"kind": 1, "xref": 0, "page": 26, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "1.4 卓越的性能   ", 28, {"kind": 1, "xref": 0, "page": 27, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "1.5 小结   ", 28, {"kind": 1, "xref": 0, "page": 27, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [2, "第2章 MongoDB基础知识   ", 30, {"kind": 1, "xref": 0, "page": 29, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "2.1 文档   ", 30, {"kind": 1, "xref": 0, "page": 29, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [3, "2.2 集合   ", 31, {"kind": 1, "xref": 0, "page": 30, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [4, "2.2.1 动态模式   ", 31, {"kind": 1, "xref": 0, "page": 30, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}],    [4, "2.2.2 命名   ", 32, {"kind": 1, "xref": 0, "page": 31, "to": {"__type__": "Point", "x": 72.0, "y": 0.0}, "zoom": 0.0}]}

设置pdf目录

设置pdf目录很简单,需要制作获取toc格式目录中得到的那种格式文件。特别注意缩进为4个空格,且文件要为utf-8编码。
然后执行pdf-toc -t MongoDB.txt -d MongoDB_dst.pdf MongoDB_src.pdf就可以得到一个带目录的文件MongoDB_dst.pdf,是不是很方便。

结语

    本来需求很简单就是要获取pdf目录,百度了好一些Python库都没咋看到获取pdf目录的现成代码,我也懒得看那些库的方法文档,肯定是有方法的。但是懒驱动我找到了这个工具,我制作《MongoDB权威指南(第2版.pdf》的pdf目录文件还是花了我好多时间,眼睛都快看瞎了,不过为了方便我自己学习,我还是弄好了。在这里我也把转换前的目录文件和《MongoDB权威指南(第2版.pdf》的【下载链接:https://545c.com/file/28844697-468213579,解压密码:https://www.cnblogs.com/janbar/】放出来,大家自己练习吧。

获取3的倍数_获取和设置pdf目录相关推荐

  1. 获取和设置pdf目录

    目录 前言 工具 获取pdf目录 获取toc格式目录 获取json格式目录 设置pdf目录 结语 前言 获取pdf目录:主要场景是为了拿到目录信息做编辑,从pdf软件里面一个个复制那肯定费时费力. 设 ...

  2. 获取3的倍数_植物分类的基础——获取广泛来源的资料【乱翻书】

    本期乱翻书 植物分类学和生物系统学 作者:[英]  C.A.斯特斯 工欲善其事,必先利其器.要对自然界现存的几十万种植物进行分类,建立一个科学的分类阶元系统,必须要有足够多的资料作为参考依据.由于分类 ...

  3. 获取下月第一天_获取当前月 下月 下下月 的第一天和最一天

    Calendar c = Calendar.getInstance();//可以对每个时间域单独修改 SimpleDateFormat sdf = new SimpleDateFormat(" ...

  4. ios 获取沙盒文件名_获取IOS各种沙盒路径的方法

    在下初学IOS编程,有很多不懂以及不了解的地方,本着分享的精神,将自己学到用到的一些东西写出来,如果有不正确的地方,希望大家指正. 本次讲解的是IOS下各个文件夹的相关知识. 首先,我们应该知道,在I ...

  5. java 获取oracle表结构_获取Oracle中所有表的列表?

    回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...

  6. py获取前端的参数_获取百度指数

    百度指数简介 百度指数有一个详细的帮助文档,下面列出来的几个点是我的个人总结: 百度指数是度量网民搜索量多寡的指数,可以用来描述社会对某某某的关注度. 百度指数大众版不要钱,百度指数专业版要钱,但不对 ...

  7. java获取支付宝实名信息_获取支付宝授权用户信息

    登录 支付宝开放平台,创建应用 进入应用 在应用信息里设置两处,授权回调只需要到域名即可. 接口加签方式如下图 使用"支付宝密钥生成器"生成,如下图 将公钥复制到 接口加签方式 的 ...

  8. java实时获取android网速_获取Android网速的另一种方法

    之前,在LOSP4.2上使用的是Android自带的接口来实现获取网速并显示在通知栏,可是到了4.3以后发现这个接口无论如何,返回值都是-1,无奈之下只得另寻办法 功夫不负有心人,我还是找到了一个方法 ...

  9. java 获取包名类名_获取指定包名下的所有类的类名(全名)

    参考来源: 以下代码一键运行: package test; import java.io.File; import java.io.IOException; import java.net.JarUR ...

最新文章

  1. 如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布?
  2. libgdx 1.4.1公布
  3. SAP推出iPhone手机端企业智能管理应用
  4. 【机器学习】LR与最大熵模型的关系
  5. Golang并发模型:合理退出并发协程
  6. 可信云十年,重磅研究成果与2021云计算十大关键词悉数发布
  7. linux中安装mysql5.1.73_linux安装mysql(5.1.73)
  8. 【NLP】基于神经网络PCNN(Piece-Wise-CNN)的关系抽取模型
  9. MobileNet_V3—SSD网络模型图文详解
  10. google code jam 2008 Mousetrap (逆向)
  11. 趋势科技2014校园招聘笔试题
  12. win10如何删除万能输入法
  13. 详解Python中列表切片及浅拷贝的关系(下)
  14. 我的世界 服务器文件ess,我的世界指令大全 ess指令用法介绍
  15. 尼克尔镜头上边的字表示什么?
  16. Raid和mdadm命令
  17. mac系统共享服务器,mac共享服务器
  18. jenkins自动化_通过Jenkins自动化PSR合规性
  19. 黑马程序员:Socket编程之(UDP vs TCP)
  20. Python 测试框架pytest

热门文章

  1. 修改大表字段属性报主键冲突
  2. VMware 在ubuntu-18.04.2安装搜狗输入法
  3. ExtJS4为form表单必填项添加红色*标识
  4. 【转】MySQL的语句执行顺序
  5. 项目实践精解:C#核心技术应用开发
  6. html里table的遍历,js遍历table中的tr
  7. c++函数题-牛牛与好数
  8. 弹性碰撞后速度方向_找准模型,快速求解碰撞类问题
  9. int*类型和int类型_mysql8.0.19中在navicat客户端中int、bigint等类型设置长度保存后为0...
  10. Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个