目录页的生成考虑了标题的长度,对过长的标题进行适当的分行处理,确保目录的整洁性。页码的添加在页面底部中央,通过绘制白色矩形覆盖原有页码区域后添加新的页码信息,以避免页码重叠。最终,所有页面(包括目录页和带有新页码的原始页面)被合并成一个PDF文件。
技术亮点
- 文本提取与处理:通过
PyMuPDF
和PyPDF2
库提取PDF文件的文本和元数据,使用正则表达式和文本处理技术清洗和格式化标题。 - 动态内容生成:使用
reportlab
库动态生成包含自定义文本(如页码和目录项)的PDF页面。 - 文档合并与修改:利用
PyPDF2
库合并PDF页面,并在合并过程中添加自定义内容。
通过这个Python项目,我们可以自动化处理一系列复杂的PDF文档管理任务,包括提取标题、生成目录、添加页码和合并文件。这大大减轻了手动处理的负担,使得管理大量PDF文档变得既简单又高效。无论是学术研究者、图书管理员还是文档管理专业人士,都可以从这个项目中受益。
代码
步骤一:提取PDF标题(Step_two.ipynb)
### 第一步:读取pdf\_dir路径下所有.pdf为后缀的文件,打开CSV文件以写入文件名和标题
### 第二步:手动对CSV文件内错误标题进行修改
# 读取路径下所有.pdf为后缀的文件
pdf_dir = '老师的论文集/'
# 合并后的PDF名字
output_pdf_path = "合并后/老师的论文集.pdf"
# 用于中间 存放文件名与标题的CSV文件
TitlesCSV = '合并后/老师的论文集.csv'```
import csv
import html
import os
import re # 导入正则表达式模块
import fitz # PyMuPDF
from PyPDF2 import PdfReader
def find\_non\_text\_chars(sentence):
# 用于检测提取的文本中是否出现非文本类型的,若有则通过类似title = title.replace("fi", "fi")替换
import regex as re
# 定义正则表达式,匹配非文本字符(除了字母、数字、空格和标点符号之外的字符)
non_text_pattern = re.compile(r'[^a-zA-Z0-9\s\p{P}]', re.UNICODE)
# 使用正则表达式搜索句子中的非文本字符
non_text_chars = non_text_pattern.findall(sentence)
# 打印出非文本字符及其类型
for char in non_text_chars:
print(title)
print(f"非文本字符 '{char}' 的类型是 '{type(char)}\n\n'")
return None
def get\_pdf\_title\_1(pdf_path):
"""读取PDF文件的标题,并进行处理。"""
with open(pdf_path,