task04 办公自动化之Python 操作 PDF

本文介绍了使用Python进行PDF操作的多个方面,包括利用PyPDF2和pdfplumber库进行PDF的批量拆分、合并、提取文字和表格内容。此外,还详细讲解了如何提取和转换PDF中的图片,添加水印以及对PDF文档进行加密和解密的操作。通过实例演示,读者可以掌握Python处理PDF的实用技巧。
摘要由CSDN通过智能技术生成
# 基本库导入
import pandas as pd
import numpy as np

1、相关库了解

利用python操作pdf会用到两个库,分别是:PyPDF2 和 pdfplumber

其中PyPDF2可以读取,写入,分割,合并PDF文件,而pdfplumber可以更好地读取PDF文件中的内容以及提取PDF中的表格

由于这两个库都不是 Python 的标准库,所以在使用之前都需要单独安装

2、批量拆分

将一个完成的PPDF拆分成几个小PDF。因为涉及到PDF的拆分,所以需要用到PyPDF2这个库。

拆分思路:

  • 读取PDF的整体信息,总页数等
  • 遍历每一页内容,以每个step为间隔将PDF拆分成每一个小的文件快
  • 将小的文件重新保存为新的PDF文件

!!注意:拆分过程中,可以手动设置间隔,例如:每5页保存成一个小的PDF文件

以03.原料药行业.pdf为例,展示拆分过程

# 导库
import os
from PyPDF2 import PdfFileReader,PdfFileWriter
# 读取待拆分pdf文件
pdf_reader = PdfFileReader("D:\\study\\datawhale\\task04\\Python基础课件.pdf")
# 获取pdf的总页数
pages = pdf_reader.getNumPages()
pages
53
# 假设以5页为间隔
step=5
save_dirpath = "D:/study/datawhale/task04"
for page in range(0,pages,step): # 从0开始每隔一个step读取一次page
    pdf_writer = PdfFileWriter() 
    
    # 拆分pdf,每step页拆分为一个文件
    for index in range(page,page+step):   # 每个间隔中,读取其中的5页 
        #print(index)
        if index < pages:  # 如果页数小于pdf的总页数
            pdf_writer.addPage(pdf_reader.getPage(index))
    #保存拆分后的小文件
    save_path = os.path.join(save_dirpath,"Python基础课件" + str(int(page))+".pdf")
    with open(save_path,'wb') as out:
        pdf_writer.write(out)

将上述过程写成一个函数,之后只需要调用函数即可

def split_pdf(filename,filepath,save_dirpath,step=5):
    '''
    拆分PDF为多个小的PDF文件,
    @param filename:文件名
    @param filepath:待拆分文件的文件路径
    @param save_path:拆分后的小的PDF保存路径
    @param step:每step间隔的页面生成一个文件,例如step=5,表示0-4页、5-9页....为一个文件
    
    '''
    if not os.path.exists(save_dirpath):
        os.mkdir(save_dirpath)
        
    pdf_reader = PdfFileReader(filepath)
    
    for page in range(0,pages,step):
        pdf_writer = PdfFileWriter()
        
        for index in range(page,page+step):
            if index < pages: # 如果原文件页数不是5的倍数,最终会出现page+step数大于原pdf的总页数,后续的getPage(index)会报错,所以需要加这一行代码判断
                pdf_writer.addPage(pdf_reader.getPage(index))
        
        save_path = os.path.join(save_dirpath,filename + str(int(page))+"-"+str(int(page+step)) + ".pdf") 
        
        with open(save_path,'wb') as out:
            pdf_writer.write(out)
split_pdf("Python基础课件","D:\\study\\datawhale\\task04\\Python基础课件.pdf","D:/study/datawhale/task04/Python基础课件导出结果")

Python基础课件.pdf一共有53页,以5页为间隔,最终生成了11个小的pdf文件

3、批量合并

合并思路:

  • 确定要合并的文件的顺序
  • 循环追加到一个文件块中
  • 保存成一个新的文件
s = os.listdir("D:\\study\\datawhale\\task04\\Python基础课件导出结果")
s[0][:-4].replace("Python基础课件","").split("-")[0]
'0'
def concat_pdf(filename,read_dirpath,save_filepath):
    '''
    合并多个PDF文件
    @param filename: 文件名
    @param read_dirpath:要合并的多个pdf的目录
    @param save_filepath:合并后文件的保存路径
    '''
    pdf_writer = PdfFileWriter()
    # 对文件名进行排序
    list_filenames = os.listdir(read_dirpath)
    list_filenames.sort(key=lambda x: int(x[:-4].replace(filename,"").split("-")[0]))  # 取出文件名中可以排序的部分
    print(list_filenames)
    for filename in list_filenames:
        filepath = os.path.join(read_dirpath,filename)
        
        # 读取每个小pdf文件
        pdf_reader = PdfFileReader<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值