【python办公自动化】task 04 python与pdf

【python办公自动化】task 04 python与pdf,第1张

概述目录1.预备知识2.批量拆分3.批量合并1.预备知识Python *** 作pdf会用到两个库:PyPDF2可以更好的读取、写入、分割、合并PDF文件pdfplumber可以更好的读取PDF文件中内容和提取PDF中的表格在使用前需要先对其进行安装pipinstallPyPDF2pipinstallpdfplumb @H_301_4@

目录1. 预备知识2. 批量拆分3. 批量合并@H_301_4@

1. 预备知识@H_301_19@@H_301_4@Python *** 作pdf会用到两个库:

PyPDF2 可以更好的读取、写入、分割、合并pdf文件pdfplumber 可以更好的读取 pdf 文件中内容和提取 pdf 中的表格@H_301_4@在使用前需要先对其进行安装

pip install PyPDF2pip install pdfplumber
2. 批量拆分@H_301_19@@H_301_4@将一个pdf拆分为几个小的pdf,主要用到PyPDF2这个库
拆分思路如下:

读取pdf的整体信息,总页数等遍历每一页内容,以每个step为间隔将pdf保存为每一个小的文件块将小的文件重新保存为新的pdf文件
import os import PyPDF2from PyPDF2 import pdffileReaderfrom PyPDF2 import pdffileWriterdef 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)
@H_301_4@


注意:第一次用的时候会报错


解决方法是从python安装包下找到PyPDF2\utils.py
将其中的238 行的

r = s.encode('latin-1')if len(s) < 2:bc[s] = rreturn r
@H_301_4@改为

try:r = s.encode('latin-1')if len(s) < 2:bc[s] = rreturn rexcept Exception as e:r = s.encode('utf-8')if len(s) < 2:bc[s] = rreturn r
@H_301_4@改完后一定要重启python,否则不成功


3. 批量合并@H_301_19@@H_301_4@思路:

确定要合并的文件顺序循环追加到一个文件块中保存成为一个新的文件
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)
@H_301_4@

总结

以上是内存溢出为你收集整理的【python办公自动化】task 04 python与pdf全部内容,希望文章能够帮你解决【python办公自动化】task 04 python与pdf所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1159253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存