【python办公自动化】task 04 python与pdf
2021/6/27 1:14:49
本文主要是介绍【python办公自动化】task 04 python与pdf,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 1. 预备知识
- 2. 批量拆分
- 3. 批量合并
1. 预备知识
Python操作pdf会用到两个库:
- PyPDF2 可以更好的读取、写入、分割、合并PDF文件
- pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格
在使用前需要先对其进行安装
pip install PyPDF2 pip install pdfplumber
2. 批量拆分
将一个pdf拆分为几个小的pdf,主要用到PyPDF2这个库
拆分思路如下:
- 读取pdf的整体信息,总页数等
- 遍历每一页内容,以每个step为间隔将pdf保存为每一个小的文件块
- 将小的文件重新保存为新的pdf文件
import os import PyPDF2 from PyPDF2 import PdfFileReader from PyPDF2 import PdfFileWriter def split_pdf(filename, filepath, save_dirpath, step=5): """ 拆分PDF为多个小的PDF文件, @param filename:文件名 @param filepath:文件路径,包含pdf的名字 @param save_dirpath:保存小的PDF的文件路径 @param step: 每step间隔的页面生成一个文件,例如step=5,表示0-4页、5-9页...为一个文件 @return: """ if not os.path.exists(save_dirpath): os.mkdir(save_dirpath) pdf_reader = PdfFileReader(filepath) # 读取每一页的数据 pages = pdf_reader.getNumPages() for page in range(0, pages, step): pdf_writer = PdfFileWriter() # 拆分pdf,每 step 页的拆分为一个文件 for index in range(page, page+step): if index < pages: pdf_writer.addPage(pdf_reader.getPage(index)) # 保存拆分后的小文件 save_path = os.path.join(save_dirpath, filename+str(int(page/step)+1)+'.pdf') print(save_path) with open(save_path, "wb") as out: pdf_writer.write(out) print("文件已成功拆分,保存路径为:"+save_dirpath) filename='易方达中小盘混合型证券投资基金2020年中期报告' filepath=r'E:\数据分析\python办公\易方达中小盘混合型证券投资基金2020年中期报告.pdf' save_dirpath='E:\数据分析\python办公\pdf拆分' split_pdf(filename,filepath,save_dirpath,step=5)
注意:第一次用的时候会报错
解决方法是从python安装包下找到PyPDF2\utils.py
将其中的238 行的
r = s.encode('latin-1') if len(s) < 2: bc[s] = r return r
改为
try: r = s.encode('latin-1') if len(s) < 2: bc[s] = r return r except Exception as e: r = s.encode('utf-8') if len(s) < 2: bc[s] = r return r
改完后一定要重启python,否则不成功
3. 批量合并
思路:
- 确定要合并的文件顺序
- 循环追加到一个文件块中
- 保存成为一个新的文件
def concat_pdf(filename, read_dirpath, save_filepath): """ 合并多个PDF文件 @param filename:文件名前缀 @param read_dirpath:要合并的PDF目录 @param save_filepath:合并后的PDF文件路径,包含新pdf的名字 @return: """ pdf_writer = PdfFileWriter() # 对文件名进行排序 list_filename = os.listdir(read_dirpath) list_filename.sort(key=lambda x: int(x[:-4].replace(filename, ""))) for filename in list_filename: print(filename) filepath = os.path.join(read_dirpath, filename) # 读取文件并获取文件的页数 pdf_reader = PdfFileReader(filepath) pages = pdf_reader.getNumPages() # 逐页添加 for page in range(pages): pdf_writer.addPage(pdf_reader.getPage(page)) # 保存合并后的文件 with open(save_filepath, "wb") as out: pdf_writer.write(out) print("文件已成功合并,保存路径为:"+save_filepath) filename='易方达中小盘混合型证券投资基金2020年中期报告' read_dirpath='E:\数据分析\python办公\pdf拆分' save_filepath='E:\数据分析\python办公\pdf合并\易方达中小盘混合型证券投资基金2020年中期报告.pdf' concat_pdf(filename,read_dirpath,save_filepath)
这篇关于【python办公自动化】task 04 python与pdf的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器