pdf 自动添加目录

pdf 添加目录

下载到的pdf书籍,只有目录可以跳转没有pdf标签,所以想自动生成pdf标签。

image-20240524110834055

提取目录链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import fitz  # pip install PyMuPDF
def extract_internal_links_with_titles_from_page(pdf_path, page_number):
# 打开PDF文件
document = fitz.open(pdf_path)
# 选择指定页面
page = document.load_page(page_number - 1) # 页码从0开始
# 提取页面中的链接
links = page.get_links()

# 处理并返回内部链接信息和标题
internal_links_with_titles = []
for link in links:
# 检查是否为内部链接
if link.get('kind') == 1: # 'kind'为1表示内部链接
page_dest = link.get('page', -1) + 1 # 页码从0开始,因此加1
# 获取链接的矩形区域
rect = fitz.Rect(link["from"])
# 在链接区域附近提取文本
text = page.get_text("text", clip=rect)
# 去除多余的空格和换行符
text = text.strip()
# 保存链接和标题
internal_links_with_titles.append((page_dest, text))

return internal_links_with_titles

pdf_path = 'cpp_book.pdf' # 替换为你的PDF文件路径
page_number = 2 # 替换为你要提取链接的页码
internal_links_with_titles = extract_internal_links_with_titles_from_page(pdf_path, page_number)
for page_dest, title in internal_links_with_titles:
print("{} {}".format(title, page_dest))

提取到目录里面的标题和对应的页码后,使用pdfdir https://github.com/chroming/pdfdir 进行自动加标签操作。

image-20240524111155052

这个里面目录分层信息是正则化匹配:

正则表达式 ^\d+\.\d+\w?\s? 可以匹配以下内容:

  1. ^ 表示匹配字符串的开头。
  2. \d+ 表示匹配一个或多个数字。
  3. \. 表示匹配一个小数点。
  4. \d+ 表示匹配一个或多个数字。
  5. \w? 表示匹配零个或一个字母、数字或下划线字符。
  6. \s? 表示匹配零个或一个空白字符(如空格、制表符等)。

综合起来,这个正则表达式匹配的内容是:以数字开头,紧接着一个小数点,再跟一个或多个数字,之后可能有一个字母或数字或下划线,最后可能有一个空白字符。例如:

  • 3.14
  • 2.5a
  • 10.0_
  • 6.02

这些都是符合该正则表达式的示例。

然后点击写入就ok