Skip to content

Latest commit

 

History

History
151 lines (116 loc) · 7.21 KB

File metadata and controls

151 lines (116 loc) · 7.21 KB

PDF Outline Editor

一个基于 Python 的 PDF 大纲编辑器,支持通过自定义格式或 LLM OCR 结果快速生成、编辑 PDF 书签(大纲)。

最新更新:

  • (26-6-22) v0.0.1 更新 导出/导入文本大纲(方便存档/备份); 空白非选中编辑窗 示例提示; 完善 两个格式粘贴检测;修复excel格式复制;增加对 不能同文件覆盖的回退机制(之前直接报错);
  • (26-6)提供 excel 复制/粘贴支持(制表符),复制是 选中要复制的行 -> 右键菜单复制为 Excel 格式;粘贴是 直接粘贴(要求2个列 title - page) (谢 科学Lover 网友的提议)

注意点: (小白用户 可以再看下面的 FAQ 部分)

  • 需要 保存另外的pdf(不能 直接覆盖原pdf文件)
  • 修改时,注意两个页码系统,目录显示页码 vs. pdf文件页码,不必计算,只需要输入 操作者自己的观察即可
  • 右上角的 “Markdown版" 按钮是动作,而非当前状态,,为了避免粘贴错,最新版加入 检测弹窗 选择自动转换功能
  • 本软件 自动检测粘贴 "缩进版"和"markdown版"(excel 则自动转为两者之一),注意不要混合格式

功能简介

  • 加载/保存 PDF 大纲:读取现有书签并编辑,保存为新的 PDF 文件。
  • 两种编辑模式
    • 缩进版:通过行首空格表示层级,适合手动调整缩进。
    • Markdown 版:使用 # 表示层级,适合直接粘贴 LLM OCR 的输出。
    • 右上角按钮可一键切换两种模式,内容自动转换。
  • 集成 LLM OCR 提示词菜单栏 -> 帮助 -> LLM OCR提示词 ,复制提示词,给视觉语言模型,加上 其他工具截图,让 LLM 解析 生成 Markdown 版目录文本,再粘贴回编辑器中。
  • 导入现成 OCR 格式:支持解析形如 页码 (p...): 标题 的特殊目录格式(支持任意层级)。(#说明:这种往往随pdf文件提供,本软件提供解析支持,在菜单栏 -> 导入 -> 导入 现成OCR版本
  • 页码补偿/偏移
    • 可设置多个“目录页码 → 实际 PDF 页码”对照对,自动计算偏移。
    • 可添加不在原目录体系中的“额外条目”,并指定放在开头或末尾。
    • 预览前三条目对应的 PDF 页面截图,方便核对。
  • 交互编辑:单击行全选,Tab 缩进/反缩进,双击弹出编辑窗修改标题、页码、层级。
  • 层级检查:保存时自动检测层级跳跃(如一级直接到三级)并给出警告。

Markdown 版-目录格式(详细解释)

这个是 笔者自创的格式,适合 LLM 辅助, 经过多次使用,目前非常可靠(qwen模型,比如Qwen3-Omni-Flash)) (本软件 主要是方便日常 辅助 OCR 的工作流,一行一行手动输入 时代一去不返)

设计说明

  • LLM熟悉Markdown语法,生成准确,本格式好处是 间隔的空格多少不影响正确性;(若为缩进版,LLM 输出遗漏难免,造成误对齐问题)
  • tips:不一定 OCR,目录本身转其他风格之类的任务,也可以交给LLM
  • 兼顾人类可读性;(不过建议,修改时 还是切换为 缩进版)
  • 正则表达式解析简单;
  • 和缩进版不同,页码不包在括号中

格式 format

每个"#" 等价层级数,依此类推, 后面标题页码,用空格隔开

  # Level1 p1
  ## Level2 p2
  ### Level3 p3

FAQ

Q: 本软件是否需要联网,或加载大模型/OCR模型 A: 简短的回答是 不联网,不包括模型,,(对电脑没什么要求) 详细的回答是,本软件,只是 截图 -> 给视觉大语言模型 做识别 -> 输出转为 pdf目录 ,这个工作流 的一个辅助工具,负责提供 prompt,将大模型输出的 特定格式数据 转为pdf目录,位置偏移计算,结果预览

Q: 本软件 是否打开 pdf 会自动生成目录? A: 简短回答:不会,,(自动化程度 还没那么高) 打开 pdf 文件,只会加载文件中 已经存在的目录(也叫 outline), 如果文件中没有,那就是空白,需要自己添加的(也是本软件的目标)


快速开始 Quick start

安装依赖

pip install PyMuPDF Pillow

如需拖放文件支持,可选安装:

pip install tkinterdnd2

运行

python PDF_大纲编辑器.py

基本流程

  1. 加载 PDF:点击“选择 PDF文件”或直接拖入文件。
  2. 获取大纲文本
    • 若已有 目录 OCR 文本(如扫描版目录),可手动整理为缩进版/Markdown 版后粘贴。
    • 若有被提供现成 OCR 格式,在菜单栏 -> 导入 -> 导入 现成OCR版本 直接输入转换
    • 手动辅助 OCR 流程
      1. 用其他软件/截图工具,截图目录页面(笔者一般用 浏览器)
      2. 获取辅助 prompt,点击 菜单 -> 帮助 -> 显示LLM OCR提示词,复制 prompt。
      3. 将 prompt 和截图,一并发给 LLM(多模态),获取类似 # 标题 页码 的结果。
      4. 粘贴回 本软件编辑区(Markdown 模式)。
  3. 编辑大纲
    • 使用工具栏按钮或 Tab/Shift+Tab 调整层级。
    • 双击条目可修改标题、页码、层级。
    • 如需调整页码偏移,在左侧“页码补偿”中添加对照或额外条目。
  4. 保存:点击“保存到 PDF”或按 Ctrl+S,选择输出路径即可。

导入现成 OCR 格式

往往随pdf文件提供,本软件提供解析支持,已经是通用的固定格式,如:

1 (p1): 卷首语
3 (p2): 第1章 成本
3 (p2-1): 成本不是产品开发的结果
3 (p2-1-1): 社长的决心

通过在菜单栏 -> 导入 -> 导入 现成OCR版本,粘贴后点击确定,会自动解析并填入编辑器(默认为缩进版,可切换为 Markdown 查看)。

项目结构

tool_pdf_outline_editor/
├── PDF_大纲编辑器.py   # 主程序
├── img/               # 图标(可选)
├── assets/
│   └── screenshots/
│       └── screenshot.webp
├── README.md
└── requirements.txt

截图

截图


知识条目 & 技术细节

  • 概念: pdf 的目录, 即文件中的 outline ,(书签也可以加在这,不过 很多阅读器,选择保存到 额外配置文件)
  • 细节: 保存pdf 不支持直接覆盖同文件,需要保存为另外的文件
  • 浏览器:firefox 浏览器的 默认显示大纲设置, 需要 pdfjs.sidebarViewOnLoad=2 (在about:config) 不然需要 保证pdf文件 没有 Attachments 附件(PDF.js 会优先显示附件)
  • 参数: DEFAULT_COLLAPSE = 2,是默认的 pdf 折叠层的 beyond 层级,可在 脚本中设置
  • 库知识: 主要通过 pymupdf 这个库实现(注意 1.24 以后版本,用 import pymupdf 不再是 fitz,本项目暂用 老的 fitz写法)

注意事项

  • 页码偏移支持全局一致偏移,若多个对照差值不一致会提示警告。
  • 额外条目的页码直接使用用户输入的实际页码,不参与偏移计算。
  • 预览功能需要打开 PDF 文件并加载大纲。

许可

MIT License