PDF书签的编辑器,基于(python、Tkinter)

发布时间 2023-07-18 08:59:07作者: 沈钩

使用

脚本

  1. github下载源码。
  2. 安装python3
  3. 安装必要的python包

pip install numpy
pip install pandas
pip install PyMuPDF
pip install opencv
pip install easyocr
easyocr模型可以不下载,在源码easy文件夹中有。

按照PyTorch官网的说明,下载PyTorch。

  1. 运行:ATMA.py

windows程序

百度网盘下载。文件夹下有两个文件,选择一个下载。

  • atma_64_F.zip: pyinstaller打包的单文件,启动慢,但是解压后文件相对较小。
  • atma_64_D.zip: 启动比较快,但是文件夹大。找到文件夹下ATMA.exe打开即可使用。

基本功能

  1. 编辑书签

     1.1 粘贴网上复制而来的目录文本:
         (1) 点击菜单栏"自动修改",会自动修改缩进(如果文字中含有"章节"等字眼,或者含有"1.2.3"这样的序数的话),
     自动删去不必要的空字符,标点……
         (2) 点击菜单"跳转页码",修改跳转页码,
         (3) 手动检查修改一些瑕疵,然后选择pdf,导入书签。
        (4)图中的罗马数字不能识别为页码,已修复。
    

编辑书签

    1.2 修改PDF中的书签。导出pdf书签……修改……导入
  1. 提取PDF目录页的的文本,形成书签

     速度快。
     效果如下图。
         (1) 第一行的是自动插入的。
         (2) 提取目录时脚本会尝试自动删除页眉页脚等无用的文字。但这些文字跨越多行的话,不能自动删除。
         (3) 总体而言,如果PDF是文字版的,且其中的文字原本就没有错误(很多PDF中的文字是OCR的),
         那么效果还可以,不需要多少人工编辑就可以导入PDF。
    

读取目录作为书签

  1. OCR识别PDF目录页面文本:

     缺点是速度慢。如果PDF清晰的话,基本没什么错字。
         效果如下图:
             (1) 识别前可以设置页码偏移。这样就会将目录页码根据这个偏移量而修改(一般是增加)。
             (2) 一个比较普遍的问题就是,页码数字比较小(只有个位数)的话,因为文字框比较小,
             很有可能会被OCR引擎忽略而不识别。
    

OCR目录

            (3) 如果目录分两栏、三栏,一定要在参数里做相应设置。这样会在识别提前将图片裁分。
            (4) 下图OCR输出的结果,书签缩进有错误。可以点击"自动修改",自动修改缩进。

目录分栏

界面

界面e

  1. 标题

     没有选择pdf的情况下,显示"ATMA"。如果选择了PDF,显示PDF的文件名+ATMA
    
  2. 菜单

     2.1 书签:打开、保存、检查、自动修改文本文件
    
         2.1.1 新建
         2.1.2 打开
         2.1.3 保存
         2.1.4 检查
             导入书签前可以点击"检查",检查书签格式是否有错误。正确的(可以导入)书签至少满足下面的要求:
                 (1) 每一条书签(每一行)的缩进不比上一条书签的缩进大2个层级。
                 (2) 每一条书签都有三个数据(两个英文分号)。
                 (3) 每条书签的跳转页码不大于PDF的页面数。
             检查过后会在软件下方显示有错误的行的行号。
         2.1.5 自动修改
             (1) 如果书签文本中有"章节",序号(如”1.2“)等字眼,会自动修改数据的缩进。
             (2) 提取每行最后的数字作为书签跳转页码。
             (3) 格式化每一行。如果没有跳转页码,将跳转页码设为0。
         2.1.6 自动修改(保持缩进)
             和上一个菜单作用类似,但是不会修改缩进。
    
     2.2 PDF:选择操作的PDF,导入导出书签,从PDF页面中中获取书签文本
    
         2.2.1 选择PDF
             选择操作的PDF文件。
    
         2.2.2 增量保存
             将书签直接保存到原PDF中。(类似于一般理解的save,覆盖保存)但是,这需要PDF支持。
             如果PDF不支持增量保存(增量保存不成功),就选择下方的"另存为"。
    
         2.2.3 另存为
             将书签导入PDF中,然后将PDF保存为另一个文件。
    
         2.3.4 导出书签
             将PDF中的书签导出。
    
         2.3.5 读取目录
             如果PDF是文字版的PDF,可以尝试通过读取PDF目录页面中文字,形成书签。
    
         2.3.6 OCR目录 
             如果PDF是图片版的,选择这个。相比上个选项,OCR速度会比较慢。
    
     2.3 编辑
         2.3.1 正则替换
             菜单栏下面的"替换"按钮是不支持正则的。如果想要使用正则替换,
             在下方输入框输入搜索的文字和要替换的文字,然后点击该菜单选项。
    
  3. 参数输入框

     输入参数,然后点击确定。
     "读取目录","OCR目录"需要一些参数。这些参数在这里输入,输入后点击确定。
     3.1 开始页:目录页面开始的页码
     3.2 终止页:目录页面终止的页面。如果终止页是"0",表示只读取"开始页"的那一页。默认值是0.
     3.3 偏移量:目录中页码数字与实际要跳转的页码直接的差值。
     3.4 分栏数:目录页面分栏的数目。OCR的时候需要设置这个参数。默认值是1,即不分栏(只有一栏)。
    
  4. 查找、替换框。

     不支持正则。查找、替换的结果会高亮。
     要使用正则替换,先在这里输入好文字,然后点击菜单栏里的"正则替换"。
    
  5. 文本框

     输入Tab会转换成四个空格。
     不稳定,不要用来编辑其他文件。
    
  6. 状态栏

     显示一些操作相关的结果
    
  7. 行号