文章目录

  • PDF Dir Generator
    • 安装 PyPDF2 和 wxPython
    • 获取 PDF 目录信息
    • 格式化书签
    • 生成书签
    • 使用说明
      • 基本流程
      • 参数设置
      • 最终效果
    • 源码下载
    • 参考

PDF Dir Generator

PDF Dir Generator,PDF 目录生成器, 是基于 wxpython 和 PyPDF2 开发的一个简易的 GUI 程序,主要功能是给未添加书签的 PDF 添加目录书签。

安装 PyPDF2 和 wxPython

可使用 pip 安装 PyPDF2 和 wxpython.

pip install PyPDF2
pip install wxPython

我使用的版本号为: Python 3.9.12, wxpython 4.2.0, PyPDF2 2.11.0

如果 PDF 经过其他软件修改(如删除书签)可能会有如下报错:

File "C:\Users\q2799\.conda\envs\py36\lib\site-packages\PyPDF2\_writer.py", line 1195, in addBookmarktitle, pagenum, parent, color, bold, italic, fit, *argsFile "C:\Users\q2799\.conda\envs\py36\lib\site-packages\PyPDF2\_writer.py", line 1174, in add_bookmarkparent = self.get_outline_root()File "C:\Users\q2799\.conda\envs\py36\lib\site-packages\PyPDF2\_writer.py", line 1008, in get_outline_rootidnum = self._objects.index(outline) + 1
ValueError: {'/Type': '/Outlines', '/First': IndirectObject(1006, 0, 3019818315728), '/Count': 493, '/Last': IndirectObject(1498, 0, 3019818315728)} is not in list

安装完成 PyPDF2 后需要对 _writer.pyget_outline_roor() 函数进行修改,这个函数的路径可以在报错信息上找到:

def get_outline_root(self) -> TreeObject:if CO.OUTLINES in self._root_object:# TABLE 3.25 Entries in the catalog dictionaryoutline = cast(TreeObject, self._root_object[CO.OUTLINES])try:idnum = self._objects.index(outline) + 1except ValueError:if not isinstance(outline, TreeObject):def _walk(node):node.__class__  = TreeObjectfor child in node.children():_walk(child)_walk(outline)outline_ref = self._add_object(outline)self._add_object(outline_ref.get_object())self._root_object[NameObject('/Outlines')] = outline_ref       idnum = self._objects.index(outline) + 1    outline_ref = IndirectObject(idnum, 0, self)assert outline_ref.get_object() == outlineelse:outline = TreeObject()outline.update({})outline_ref = self._add_object(outline)self._root_object[NameObject(CO.OUTLINES)] = outline_refreturn outline

获取 PDF 目录信息

这一步比较繁琐,需要手动来获取 PDF 目录信息,主要有两种方式:

  1. (推荐)使用书签获取软件(见源码下载)

    在 全国图书馆参考咨询联盟 上搜索你的 PDF,例如我这儿搜索的是《合成孔径雷达成像算法与实现》,打开版权页 / 前言页 / 目录页,复制它的SS码到书签获取软件,点击获取即可得到 PDF 的目录信息。

  2. (法1没找到时)使用一些OCR文字识别工具,或者直接原PDF的目录页提取出来,然后再转为word

最后,我们需要将目录信息保存为一个 txt 文件,类似下面这种:

第一部分  合成孔径雷达基础   2
第1章  概论 2
1.1合成孔径雷达背景简介   2
1.2遥感中的雷达   3
1.3  SAR基础  3
1.4星载合成孔径雷达传感器  7
1.5内容概要 9
1.5.1星载合成孔径雷达图像示例   10
参考文献    11
第2章  信号处理基础 14
2.1简介   14
2.2线性卷积 14
2.2.1连续时间卷积 14
2.2.2离散时间卷积 16
2.3傅里叶变换    18
2.3.1连续时间傅里叶变换  18
2.3.2离散傅里叶变换    18
2.3.3傅里叶变换性质    19
2.3.4傅里叶变换示例    22
2.4卷积的DFT计算 24
2.5信号采样 25
2.5.1采样信号的频谱    25
2.5.2信号类型   26
2.5.3奈奎斯特采样率和混叠 28
2.6小结   42
2.6.1金星坑的麦哲伦图像  42
参考文献    43
附录A  RADARSAT数据光盘   393
缩略语对照表  395
符号表 398
参考书目    401
索引  415

每一行包含两项:标题 title + 页码 page。

其中标题中的符号 . 可以帮助我们判断书签的级别,例如:

第一部分  合成孔径雷达基础   2
第1章  概论 2

标题符号 . 个数为0,我们认为这些是一级书签,像:

2.1简介    14
2.2线性卷积 14

标题符号 . 个数为1,我们认为这些是二级书签。当然也有例外

1.5.1星载合成孔径雷达图像示例    10
参考文献    11
第2章  信号处理基础 14

这里的“参考文献 ”应该和“1.5.1星载合成孔径雷达图像示例 ”同属于二级书签,但是由于没有符号 . 会被误判断为一级书签。

注意到这些标题名往往是固定的,因此可以预定义这些标题的级别,当书签的标题与预定义的标题一致时,直接判定为预定义级别,无需统计符号 . 的个数。

格式化书签

为提高目录文件的可读性,根据书签的级别在每一行添加 n-1 个\t前缀(n为书签级别)。
后续的“生成书签”也是根据前缀数来判断书签级别的,因此这一步往往是必须的。

点击 Run > Format Dir, 最终代码格式化为:

第一部分  合成孔径雷达基础   2
第1章  概论 21.1合成孔径雷达背景简介  21.2遥感中的雷达  31.3  SAR基础 31.4星载合成孔径雷达传感器 71.5内容概要    91.5.1星载合成孔径雷达图像示例  10参考文献  11
第2章  信号处理基础 142.1简介 142.2线性卷积   142.2.1连续时间卷积   142.2.2离散时间卷积   162.3傅里叶变换  182.3.1连续时间傅里叶变换    182.3.2离散傅里叶变换  182.3.3傅里叶变换性质  192.3.4傅里叶变换示例  222.4卷积的DFT计算   242.5信号采样   252.5.1采样信号的频谱  252.5.2信号类型 262.5.3奈奎斯特采样率和混叠   282.6小结 422.6.1金星坑的麦哲伦图像    42参考文献  43
附录A  RADARSAT数据光盘   393
缩略语对照表  395
符号表 398
参考书目    401
索引  415

生成书签

再完成 format dir 后点击 Run > Generate Dir ,一切正常的话即可完成书签的添加。

使用说明

基本流程

注意:选择 PDF 时记得先清空里面原先的书签。

参数设置

参数说明

  • Offset 页码偏移量,书签对应的页数 = 目录文件的page + offset, 一般这个值等于目录页最后一页所在的页码;
  • Prefix 目录文件每行的前缀, 生成书签时用于判断书签的级别
  • DELIMITER 单词分隔符, 通常是空格, 不建议修改
  • LEVEL_MARKER 级别标志符, 格式化书签时用于判断书签的级别
  • Pre-level 预定义级别
  • Pre-title 预定义标题, 注意使用“;”隔开,不要有多余的空格
  • PDF Output Path PDF输出目录, 留空会根据输入PDF名自动生成
  • Dir-Log Path 格式化目录文件的输出日志存放文件夹目录,留空则与原目录在同一文件夹
  • Dir-format Path 格式化目录的输出文件夹,留空则与原目录在同一文件夹

这里通常需要设置的是 Offset 以及 Pre-title,设置完成后记得点击 Finish

除了这种设置方式外,还支持直接导入配置文件(文件后缀名为 .conf):

###########################################################################
#
# 这是一个配置文件, 以行为基本单元, 可以分为注释行, 赋值行和空行.
#
# 注释行以字符 '#' 开头, 程序会忽略以'#'开头的行; 行首直接回车,则是空行; 注释行
# 和空行可以提高配置文件的可读性.
#
# 赋值行的格式为: 字段名 = 值:
# 1. "值"可以修改, 但不要修改"字段名";
# 2. "="两边的空格可有可无, 数量没有限制;
#
############################################################################ str, 待添加书签的PDF路径
PDF_INPUT_PATH = "test\pdg_test.pdf"# str, 目录文件的路径
DIR_INPUT_PATH = "test\pdg_normal_dir.txt"# int, 页码偏移量, 通常是PDF目录页最后一页的页码
OFFSET = 5# char, 目录文件每行的前缀, 生成书签时用于判断书签的级别
PREFIX = "\t"# char, 单词分隔符, 通常是空格, 不建议修改
DELIMITER = " "# char, 级别标志符, 格式化书签时用于判断书签的级别
LEVEL_MARKER = "."# int, 预定义级别
PRE_LEVEL = 2# str, 预定义标题, 使用';'隔开
PRE_TITLE = "本章小结;习题"# str, 格式化目录文件的输出日志存放文件夹,留空则与原目录在同一文件夹
DIR_LOG_PATH = ""# str, 格式化目录的输出文件夹,留空则与原目录在同一文件夹
DIR_FORMAT_PATH = ""# PDF输出目录, 留空会根据输入PDF名自动生成
PDF_OUTPUT_PATH = ""# int, 是否只显示目录日志
IS_PRINT_ACTICE_ONLY = 0# int, 生成日志前默认先进行格式化
IS_FORMAT_DIR_FIRST = 1# int, 是否打印生成书签过程中的信息
IS_PRINT_PROCESS = 1

最终效果

源码下载

  • 仓库:https://gitee.com/iam002/pdfdir-generator2
  • 书签提取软件:
    链接:https://pan.baidu.com/s/1FDMd4l8vFH5nAT2VjczGdg
    提取码:p3qd

参考

  • https://www.codetd.com/en/article/11823498
  • https://www.cnblogs.com/1blog/p/15186521.html
  • https://www.jianshu.com/p/1aac3ae4d620?tdsourcetag=s_pcqq_aiomsg
  • https://www.wxwidgets.org/

PDF目录书签生成器 PDG相关推荐

  1. python合并pdf 加书签_Python生成pdf目录书签的实例方法

    有时候我们用的一些pdf资料是没有目录的,这样找寻我们想到的东西比较麻烦.本篇文章就为大家带来python来生成pdf目录书签的方法. 首先,我们需要下载一个软件FreePic2Pdf,利用它我们可以 ...

  2. 【PdgCntEditor】利用PDF目录书签编辑软件PdgCntEditor为PDF型图书快速添加书签的方法

    一.给PDF加书签的两种情况 1.1 文字版PDF添加书签的理想情形 假设我们弄到了一本PDF,这个PDF如果是由Word或WPS转化而来,其中的标题也就代表了目录,我们可以用acrobat PDF中 ...

  3. PDF 书签制作和 Word 文档转 PDF 生成书签保留目录超链接的方法

    根据 PDF 文档创建性质来制作书签 主要有两类 由可编辑文档创建 由不可编辑的图片创建 第一部分 由可编辑文档创建的 PDF 书签制作方法 1.Word 文档目录转 PDF 生成书签 Word自带转 ...

  4. word转pdf后书签目录失效解决方法

    word转pdf后书签目录失效解决方法 安装Acrobat和AutoBookmark,Acrobat自己上网找,AutoBookmark链接放下面 链接: https://pan.baidu.com/ ...

  5. 给PDF添加书签目录

    给PDF添加书签目录 作为一个强迫症,下载到扫描版PDF后,必须将其电子化,先用Adobe Acrobat将其OCR,然后添加书签. OCR可以没有,但书签是万万不能没有的,否则那么一大块书翻阅起来绝 ...

  6. 一键生成PDF文档的书签和目录(书签,目录页带页码 都行)

    转自:https://blog.csdn.net/u010391342/article/details/86681359 一键生成PDF文档的书签目录 原创codeing_doc 发布于2019-01 ...

  7. python 根据PDF 目录生成PDF书签

    Python 代码 PDF 生成书签代码 ,使用PyPDF4 库. txt_path 目录文件 pdf_path pdf 文件 换成自己的地址 txt 文件 格式 第 1 章-LAMP 网站构建-1 ...

  8. Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF--高清晰

    一.下载地址(永久有效) 百度云盘下载(公开永久):Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF高清晰 CSDN积分下载:Hadoop权威指南(第3版)+高清晰 二.数据的存储和分 ...

  9. Android PDF原生实现 PDF阅读、PDF手势伸缩、PDF目录、PDF预览缩略图 PDF方案选择 google doc android-pdfview mupdf pdf.js x5

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

  10. 如何快速为没有书签pdf制作书签

    网上下载的好多Pdf都没有书签,电子书籍几百页看起来没有书签,很不方便,手动逐个为Pdf添加书签难免有些繁琐,下面这个方法可能有助于你快速生成书签: 举例: 1. 将网上找到的书签复制到新建word文 ...

最新文章

  1. Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  2. win10组件服务计算机是红色的,KB4023057:Windows 10更新服务组件的更新
  3. 适用于无服务器Java开发人员的AWS Lambda:它为您带来了什么?
  4. 信息学奥赛一本通(1412:二进制分类)
  5. 【Java】使用Switch语句实现成绩等级判断
  6. 关于webservlet 请求异步处理,链接未关闭出现的bug
  7. 【Computer Organization笔记11】多周期CPU
  8. LINUX安装node/nodejs
  9. [Azure][PowerShell][ASM][04]Storage
  10. windows系统下搭建私有nuget仓储服务器, 打包程序集并推送到私有nuget仓储服务器...
  11. python读取scv文件显示:OSError: Initializing from file failed
  12. lingo与excel
  13. 唯物主义观点有哪些_唯物主义的观点及方法论有哪些?
  14. 水浊度传感器( ADC 代码详解)
  15. linux命令 sys,用syslinux引导多个linux系统
  16. precede和previous_构词法词缀
  17. C# 版 flvmerge:快速合并多个flv文件
  18. vue关闭eslint语法检查
  19. 华为服务器的系统,华为服务器系统
  20. 如何使用预约旺进行免费的在线平台预约

热门文章

  1. JavaScript 封装对象与强制类型转换
  2. 闭合导线计算matlab代码,【求助】闭合导线简易平差Matlab代码需要大神帮忙
  3. JSAPI微信公众号apiV3文档支付
  4. 使用doctrine的内存耗尽解决办法
  5. linux非root用户添加rzsz,linux RZSZ RZSZ 安装
  6. 亿赛通加密软件不显示小锁图标
  7. ApolloStudio高手之路(12):机器视觉图像匹配定位与激光打标领域深度结合(基于海康威视VisionMaster九点标定、模板快速匹配定位、标定转换以及金橙子EzCad2二次开发)
  8. 华为 eNSP 模拟器安装教程(内含下载地址)
  9. OOP的核心思想是什么?
  10. 我的世界服务器物品管理,我的世界NEI物品管理器mod详细图文使用教程