前言

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

工具

在网上搜索一波,找到了【pdf-toc】这个命令行工具,可以实现获取pdf目录,以及设置pdf目录。

感觉很方便,只是需要python >= 3.6的环境,然后执行pip install pdf-toc进行安装。该命令行的帮助文档如下:

pdf-toc -h
usage: 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://www.cnblogs.com/janbar/】放出来,大家自己练习吧。

获取和设置pdf目录的更多相关文章

  1. [WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]

    Windows系统提供一组API实现对程序运行时相关目录的获取和设置.用户可以使用GetCurrentDirectory和SetCurrentDirectory获取程序的当前目录,获取模块的路径使用G ...

  2. 获取当前目录getcwd,设置工作目录chdir,获取目录信息

    #include <unistd.h> #include <stdio.h> #include <limits.h> int main(int argc, char ...

  3. Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图

    1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...

  4. 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机

    本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...

  5. [WinAPI] API 14 [获取、设置文件属性和时间]

    >_< 为了获取文件属性,用户可以使用GetFileAttributes与GetFileAttributesEx函数. GetFileAttributesEx函数除了返回文件属性外,还返回 ...

  6. PHP - 获取和设置include_path .

    PHP - 获取和设置include_path 分类:             PHP              2011-02-16 13:19     2818人阅读     评论(1)     ...

  7. Java 设置PDF文档背景色

    一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景色 设置图 ...

  8. Android : 反射机制获取或设置系统属性(SystemProperties)【转】

    本文转载自:https://blog.csdn.net/wei_lei/article/details/70312512 Android.os.SystemProperties 提供了获取和设置系统属 ...

  9. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

随机推荐

  1. 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)

    写在前面 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部分问题都能够在我的公众号[冰河技术]中找到答案,面试过程还是挺轻松的,最终也是轻松的拿到了Off ...

  2. C语言实现数据结构的邻接矩阵----数组生成矩阵、打印、深度优先遍历和广度优先遍历

    写在前面 图的存储结构有两种:一种是基于二维数组的邻接矩阵表示法. 另一种是基于链表的的邻接表表示法. 在邻接矩阵中,可以如下表示顶点和边连接关系: 说明: 将顶点对应为下标,根据横纵坐标将矩阵中的某 ...

  3. 记一次GDB调试

    目标文件: ciscn_2019_ne_5. 来源 :https://buuoj.cn/challenges 保护情况:保护是没有保护的 主要伪代码: int __cdecl main(int arg ...

  4. linux监控工具audit

    audit是什么? audit是记录linux审计信息的内核模块. 他记录系统中的各种动作和事件,比如系统调用,文件修改,执行的程序,系统登入登出和记录所有系统中所有的事件.audit还可以将审计记录 ...

  5. IIS目录浏览模式打开文件还是无法下载

    写在前面的话 IIS已经设置目录浏览启用,且可以正常访问到文件,说明这些设置没问题,但是点击文件进行下载时,却提示无法下载,文件不存在等等,有的又可以,一顿操作后发现,原来是文件类型没有包含在MIME ...

  6. MDK内的KEEP关键字以及$$Base $$Limit

    使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为vo ...

  7. 使用free掉的内存的危害

    1 源码 #include <stdio.h> #include <stdlib.h> // 编译环境 gcc int main(void) { printf("** ...

  8. Focal loss论文解析

    Focal loss是目标检测领域的一篇十分经典的论文,它通过改造损失函数提升了一阶段目标检测的性能,背后关于类别不平衡的学习的思想值得我们深入地去探索和学习.正负样本失衡不仅仅在目标检测算法中会出现 ...

  9. 【字符串算法】AC自动机

    国庆后面两天划水,甚至想接着发出咕咕咕的叫声.咳咳咳,这些都不重要!最近学习了一下AC自动机,发现其实远没有想象中的那么难. AC自动机的来历 我知道,很多人在第一次看到这个东西的时侯是非常兴奋的.( ...

  10. 【题解】[APIO2010]特别行动队

    Link 题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大.分段必须连续. \(\text{Solution:}\) 设计\(dp[i]\)表示前\ ...