在当今数字化办公和信息管理的大环境下,PDF 作为一种广泛使用的文档格式,承载着丰富的信息。然而,在很多情况下,我们会遇到需要对大型的 PDF 文件进行处理的需求。一个典型的场景是,一个多页的 PDF 文件包含了多个不同主题或信息单元,而用户希望将其按页拆分成多个单独的 PDF 文件,以便于更方便地管理、存储和检索这些信息。
此外,为了进一步提高文件管理的效率和准确性,我们希望能够根据 PDF 每页的内容对拆分后的文件进行智能重命名,使文件名称能够直观反映其包含的主要信息。
以下是使用 Python 和腾讯云 OCR API 实现将 PDF 按页拆分多个 PDF 文件并用 PDF 里文字对文件批量重命名
PyPDF2
:用于拆分 PDF 文件。tencentcloud-sdk-python
:腾讯云 Python SDK,用于调用腾讯云 OCR 服务。pdf2image
:用于将 PDF 页面转换为图像,以便进行 OCR 识别。同时需要安装 Poppler
工具,pdf2image
依赖它来处理 PDF 文件。bash
pip install PyPDF2 tencentcloud-sdk-python pdf2image
SecretId
和 SecretKey
。python
import os
from PyPDF2 import PdfReader, PdfWriter
from pdf2image import convert_from_path
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.ocr.v20181119 import ocr_client, models
import base64
# 腾讯云 API 密钥
SECRET_ID = 'your_secret_id'
SECRET_KEY = 'your_secret_key'
def split_pdf(input_pdf_path):
"""
将 PDF 按页拆分为多个 PDF 文件
:param input_pdf_path: 输入的 PDF 文件路径
:return: 拆分后的 PDF 文件列表
"""
pdf_reader = PdfReader(input_pdf_path)
output_pdfs = []
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PdfWriter()
pdf_writer.add_page(pdf_reader.pages[page_num])
output_pdf_path = f'page_{page_num + 1}.pdf'
with open(output_pdf_path, 'wb') as output_pdf:
pdf_writer.write(output_pdf)
output_pdfs.append(output_pdf_path)
return output_pdfs
def pdf_page_to_image(pdf_path):
"""
将 PDF 页面转换为图像
:param pdf_path: PDF 文件路径
:return: 图像对象
"""
images = convert_from_path(pdf_path)
return images[0]
def ocr_image(image):
"""
使用腾讯云 OCR 识别图像中的文字
:param image: 图像对象
:return: 识别出的文字
"""
cred = credential.Credential(SECRET_ID, SECRET_KEY)
httpProfile = HttpProfile()
httpProfile.endpoint = "ocr.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = ocr_client.OcrClient(cred, "ap-guangzhou", clientProfile)
image.save('temp_image.jpg', 'JPEG')
with open('temp_image.jpg', 'rb') as f:
image_data = f.read()
base64_image = base64.b64encode(image_data).decode('utf-8')
req = models.GeneralBasicOCRRequest()
params = {
"ImageBase64": base64_image
}
req.from_json_string(str(params).replace("'", '"'))
resp = client.GeneralBasicOCR(req)
result = resp.to_json_string()
import json
result_json = json.loads(result)
text = ''.join([item['DetectedText'] for item in result_json['TextDetections']])
return text
def rename_pdfs(pdf_paths):
"""
根据 OCR 识别结果重命名 PDF 文件
:param pdf_paths: 待重命名的 PDF 文件列表
"""
for pdf_path in pdf_paths:
image = pdf_page_to_image(pdf_path)
text = ocr_image(image)
# 处理识别结果,去除非法字符
valid_chars = "-_.() abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
new_name = ''.join(c for c in text if c in valid_chars).strip()
if new_name:
new_path = f'{new_name}.pdf'
os.rename(pdf_path, new_path)
print(f'Renamed {pdf_path} to {new_path}')
else:
print(f'No valid text found for {pdf_path}, keeping original name.')
if __name__ == "__main__":
input_pdf = 'your_input_pdf.pdf'
split_pdfs = split_pdf(input_pdf)
rename_pdfs(split_pdfs)
将上述代码保存为一个 Python 文件(例如 pdf_split_and_rename.py
),并将 your_secret_id
、your_secret_key
和 your_input_pdf.pdf
替换为实际的腾讯云 API 密钥和输入的 PDF 文件路径。然后在终端中运行以下命令:
bash
python pdf_split_and_rename.py
split_pdf
函数:将输入的 PDF 文件按页拆分为多个单独的 PDF 文件。pdf_page_to_image
函数:将拆分后的 PDF 页面转换为图像,以便进行 OCR 识别。ocr_image
函数:使用腾讯云 OCR 服务识别图像中的文字。rename_pdfs
函数:根据 OCR 识别结果重命名拆分后的 PDF 文件。通过以上步骤,你可以实现将 PDF 按页拆分并根据其中的文字对文件进行批量重命名。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。