广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现自动化处理PDF文件的方法详解
  • 681
分享到

Python实现自动化处理PDF文件的方法详解

2024-04-02 19:04:59 681人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录自动化处理pdf文件1. 批量合并PDF文件2. 批量拆分PDF文件3. 批量加密PDF文件4. 批量PDF添加水印完整代码自动化处理PDF文件 使用python完成简单的PDF

自动化处理PDF文件

使用python完成简单的PDF文件处理操作,如PDF文件的批量合并、拆分、加密以及添加水印等。

1. 批量合并PDF文件

from pathlib import Path
# PdfFileReader用于读取PDF文件,PdfFileMerger用于合并PDF文件
from PyPDF2 import PdfFileReader, PdfFileMerger


src_folder = Path('PDF1')  # 设置要合并的多个PDF文件所在的文件路径
des_file = Path(r'PDF2\combine.pdf')    # 设置合并后的PDF文件的保存文件夹和文件名
# 调用路径对象的parent属性返回父文件夹(即保存文件夹)的路径
if not des_file.parent.exists():
    # 如果该文件夹不存在,则创建该文件夹
    des_file.parent.mkdir(parents=True)
# 获取所有要合并的PDF文件的路径
file_list = list(src_folder.glob('*.pdf'))

# 读取PDF并进行合并
merger = PdfFileMerger()  # 创建PdfFileMerger对象
outputPages = 0  # 统计合并到PDF文件的总页数
# 遍历文件列表
for pdf in file_list:
    input_file = PdfFileReader(str(pdf))  # 读取待合并的PDF文件
    merger.append(input_file)  # 将PDF文件合并到PdfFileMerger对象中
    pageCount = input_file.getNumPages()   # 获取PDF文件的页数
    print(f'{pdf.name}--页数:{pageCount}')
    outputPages += pageCount  # 进行累加,统计总页数
merger.write(str(des_file))  # 将合并好的PDF文件写入指定的路径
merger.close()  # 关闭PdfFileMerger对象,释放资源
print(f'\n合并后的总页数:{outputPages}')

测试文件:

效果:

2. 批量拆分PDF文件

from math import ceil
from pathlib import Path
from PyPDF2 import PdfFileReader, PdfFileWriter

src_folder = Path('PDF2')  # 设置要拆分的多个PDF文件所在的文件路径
output_folder = Path('PDF2')  # 设置拆分后的PDF文件的保存文件夹和文件名
# 获取所有要拆分的PDF文件的路径
file_list = list(src_folder.glob('*.pdf'))
# 采用按固定页数进行拆分
step = 5  # 每份为5页
for pdf in file_list:
    inputFile = PdfFileReader(str(pdf))
    pages = inputFile.getNumPages()  # 获取PDF文件的页数
    # 判断PDF文件页数是否小于等于step
    if pages <= step:
        # 若是则不进行拆分
        continue
    else:
        parts = ceil(pages / step)  # 拆分的份数,向上取整
    # 根据份数进行循环
    for pt in range(parts):
        # 计算每一份的开始页码和结束页码
        # PyPDF2模块中,PDF文件页码从0开始
        start = step * pt
        # 判断是否是最后一份
        if pt != (parts - 1):
            # 如果不是最后一份,那么结束页码为开始页码加每份页数减1
            end = start + step - 1
        else:
            # 若是最后一份,则结束页码等于文件页数减1
            end = pages - 1

        # 拆分文件
        outputfile = PdfFileWriter()  # 创建PdfFileWriter对象
        for pageNum in range(start, end + 1):
            outputfile.addPage(inputFile.getPage(pageNum))
        # 调用路径对象的stem属性获取文件的主名,与后面的字符串拼接成PDF文件名
        pt_name = f'{pdf.stem}_第{pt + 1}份.pdf'
        pt_file = output_folder / pt_name  # 生成当前份的PDF文件的保存路径
        with open(pt_file, 'wb') as f:
            outputfile.write(f)
    print(f'【{pdf.name}】共{pages}页,拆分为{parts}份-->完成')

效果:

3. 批量加密PDF文件

from pathlib import Path
from PyPDF2 import PdfFileReader, PdfFileWriter

src_folder = Path('PDF2')  # 设置要加密的多个PDF文件所在的文件路径
output_folder = Path('PDF2')  # 设置加密后的PDF文件的保存文件夹和文件名
# 获取所有要加密的PDF文件的路径
file_list = list(src_folder.glob('*.pdf'))
# 遍历文件列表
for pdf in file_list:
    inputFile = PdfFileReader(str(pdf))  # 读取文件
    outputFile = PdfFileWriter()  # 创建PdfFileWriter对象
    pageCount = len(inputFile.pages)  # 获得PDF文件页数
    for pageNum in range(pageCount):
        # 将PDF内容逐页添加到输出文件
        outputFile.add_page(inputFile.pages[pageNum])
        # 进行加密
        outputFile.encrypt('123456')
        # 输出文件名
        output_name = f'{pdf.stem}_encrypted.pdf'
        # 输出文件的路径
        output_path = output_folder / output_name
        with open(output_path, 'wb') as pf:
            outputFile.write(pf)
    print(f'{output_name}加密文件-->保存完成')

效果:

4. 批量PDF添加水印

4.1 创建水印文件

安装reportlab模块

pip install reportlab

def createWatermark(content):
    """
    创建水印
    :param content: 水印内容
    :return:
    """
    filename = 'watermark.pdf'  # 水印文件的文件名
    can = canvas.Canvas(filename=filename, pagesize=(30 * cm, 30 * cm))  # 设置水印文件的页面大小
    can.translate(5 * cm, 0 * cm)  # 设置页面的坐标原点
    # 注册水印文件需要使用的字体
    reportlab.pdfbase.ttfonts.pdfmetrics.reGISterFont(
        reportlab.pdfbase.ttfonts.TTFont(name='华文行楷', filename=r'C:\windows\Fonts\STXINGKA.TTF'))
    can.setFont(psfontname='华文行楷', size=25)  # 设置水印字体即字号
    can.rotate(28)  # 设置水印旋转角度
    can.setFillColorRGB(r=0.3, g=0.6, b=0.9)  # 设置填充颜色
    can.setFillAlpha(a=0.2)  # 设置透明度
    for i in range(0, 30, 5):
        for j in range(0, 30, 5):
            can.drawString(x=i * cm, y=j * cm, text=content)  # 绘制6行x6列的水印文字
    can.save()  # 保存水印
    return filename

4.2 添加水印

def addWatermark(pdf_file_input, pdf_file_mark, pdf_file_output):
    """
    添加水印
    :param pdf_file_input: 需要添加水印的文件
    :param pdf_file_mark: 水印文件
    :param pdf_file_output: 输出文件
    :return:
    """
    input_file = PdfFileReader(pdf_file_input)
    output_file = PdfFileWriter()  # 创建PdfFileWriter对象
    page_count = len(input_file.pages)  # 获得PDF文件页数
    water_mark = PdfFileReader(pdf_file_mark)  # 读取水印PDF文件
    for pageNum in range(page_count):
        page = input_file.pages[pageNum]
        page.merge_page(water_mark.pages[0])  # 将两张PDF合并成1张
        output_file.add_page(page)  # 将页面添加到PDF文件
    with open(pdf_file_output, 'wb') as pf:
        output_file.write(pf)
    print(f'{pdf_file_input}添加水印-->处理完成')

完整代码

# author:mlnt
# createdate:2022/8/25
from pathlib import Path
from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
import reportlab.pdfbase.ttfonts


def createWatermark(content):
    """
    创建水印
    :param content: 水印内容
    :return:
    """
    filename = 'watermark.pdf'  # 水印文件的文件名
    can = canvas.Canvas(filename=filename, pagesize=(30 * cm, 30 * cm))  # 设置水印文件的页面大小
    can.translate(5 * cm, 0 * cm)  # 设置页面的坐标原点
    # 注册水印文件需要使用的字体
    reportlab.pdfbase.ttfonts.pdfmetrics.registerFont(
        reportlab.pdfbase.ttfonts.TTFont(name='华文行楷', filename=r'C:\Windows\Fonts\STXINGKA.TTF'))
    can.setFont(psfontname='华文行楷', size=25)  # 设置水印字体即字号
    can.rotate(28)  # 设置水印旋转角度
    can.setFillColorRGB(r=0.3, g=0.6, b=0.9)  # 设置填充颜色
    can.setFillAlpha(a=0.2)  # 设置透明度
    for i in range(0, 30, 5):
        for j in range(0, 30, 5):
            can.drawString(x=i * cm, y=j * cm, text=content)  # 绘制6行x6列的水印文字
    can.save()  # 保存水印
    return filename


def addWatermark(pdf_file_input, pdf_file_mark, pdf_file_output):
    """
    添加水印
    :param pdf_file_input: 需要添加水印的文件
    :param pdf_file_mark: 水印文件
    :param pdf_file_output: 输出文件
    :return:
    """
    input_file = PdfFileReader(pdf_file_input)
    output_file = PdfFileWriter()  # 创建PdfFileWriter对象
    page_count = len(input_file.pages)  # 获得PDF文件页数
    water_mark = PdfFileReader(pdf_file_mark)  # 读取水印PDF文件
    for pageNum in range(page_count):
        page = input_file.pages[pageNum]
        page.merge_page(water_mark.pages[0])  # 将两张PDF合并成1张
        output_file.add_page(page)  # 将页面添加到PDF文件
    with open(pdf_file_output, 'wb') as pf:
        output_file.write(pf)
    print(f'{pdf_file_input}添加水印-->处理完成')


if __name__ == '__main__':
    # 创建Path对象
    src_folder = Path('PDF1')
    output_folder = Path('PDF_mark')
    # 判断输出目录是否存在
    if not output_folder.exists():
        # 不存在则创建
        output_folder.mkdir(parents=True)
    file_list = list(src_folder.glob('*.pdf'))  # 获得给定目录下的所有pdf文件的路径
    for file in file_list:
        pdf_file_in = str(file)  # 输入文件路径
        # 创建水印
        pdf_file_mark = createWatermark('绝密文件')
        # 输出文件名
        output_name = f'{file.stem}_mark.pdf'
        pdf_file_out = str(output_folder / output_name)  # 输出文件的路径
        addWatermark(pdf_file_in, pdf_file_mark, pdf_file_out)  # 添加水印

效果:

以上就是Python实现自动化处理PDF文件的方法详解的详细内容,更多关于Python自动化处理PDF的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python实现自动化处理PDF文件的方法详解

本文链接: https://www.lsjlt.com/news/120328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现自动化处理PDF文件的方法详解
    目录自动化处理PDF文件1. 批量合并PDF文件2. 批量拆分PDF文件3. 批量加密PDF文件4. 批量PDF添加水印完整代码自动化处理PDF文件 使用Python完成简单的PDF...
    99+
    2022-11-11
  • Python实现自动化处理Word文档的方法详解
    目录1. 批量生成Word文档2. 将Word文档批量转换成PDF3. 在Word文档中批量标记关键词4. 在Word文档中批量替换关键词使用Python实现Word文档的自动化处理...
    99+
    2022-11-11
  • 详解Python自动化之文件自动化处理
    一、生成随机的测验试卷文件 假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整问...
    99+
    2022-11-12
  • Python中怎么实现自动化处理文件
    Python中怎么实现自动化处理文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。遍历一个目录中的文件如果有如下多个数据需要读取和处理:├── data ...
    99+
    2023-06-15
  • Python实现PDF转Word的方法详解
    由于PDF的文件大多都是只读文件,有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作。 看了网络上面的python转换PDF文件为Word的相关文章感觉都...
    99+
    2023-02-16
    Python PDF转Word Python PDF Word
  • Python自动操作Excel文件的方法详解
    目录工具读取Excel文件内容写入Excel文件内容Excel文件样式调整设置表头的位置设置单元格的宽高总结工具 python3.7 Pycharm Excel xlwt&x...
    99+
    2022-11-11
  • Python对PDF文件的常用操作方法详解
    目录工具从PDF中提取文本旋转和叠加页面加密PDF文件创建PDF文件补充工具 python3.7 Pycharm PDF PyPDF2 reportlab 从PDF中提取文本 PyP...
    99+
    2022-11-11
  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)
    目录背景实现过程1)替换Word模板生成对应邀请函2)将Word邀请函转化为Pdf格式3)读取Excel表格中的姓名和邮箱4)自动发送邮件5)完整代码总结 背景 想象一下,现在你有一...
    99+
    2022-11-12
  • Python办公自动化Word转Excel文件批量处理的方法
    本篇内容主要讲解“Python办公自动化Word转Excel文件批量处理的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python办公自动化Word转Excel文件批量处理的方法”吧!前言...
    99+
    2023-07-02
  • Python实现自动清理电脑垃圾文件详解
    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。垃圾清理器的作用其实也是对这些文件进行清理,不会影响到我们使用产生的数据文件。...
    99+
    2022-11-13
  • Python高效处理大文件的方法详解
    目录开始处理文本串行处理多进程处理并行处理并行批量处理将文件分割成批运行并行批处理tqdm 并发结论为了进行并行处理,我们将任务划分为子单元。它增加了程序处理的作业数量,减少了整体处...
    99+
    2022-11-11
  • Python详解复杂CSV文件处理方法
    目录项目简介项目笔记与心得1.分批处理与多进程及多线程加速2.优化算法提高效率总结项目简介 鉴于项目保密的需要,不便透露太多项目的信息,因此,简单介绍一下项目存在的难点: 海量数据:...
    99+
    2022-11-11
  • Python办公自动化批量处理文件实现示例
    目录引言需求分析Python实现结束语引言 要说在工作中最让人头疼的就是用同样的方式处理一堆文件夹中文件,这并不难,但就是繁。所以在遇到机械式的操作时一定要记得使用Python来合理...
    99+
    2022-11-11
  • Python自动化办公之清理重复文件详解
    目录清理重复的文件清理重复文件的优化1清理重复文件的优化2清理重复文件的优化3批量修改文件名清理重复的文件 已知条件: 什么都不知道,只需要知道它是文件就可以了 实现方法: 可以从指...
    99+
    2022-11-11
  • python 自动化将markdown文件转成html文件的方法
    一、背景 我们项目开发人员写的文档都是markdown文件。对于其它组的同学要进行阅读不是很方便。每次编辑完markdown文件,我都是用软件将md文件转成html文件。刚开始转的时候,还没啥,转得次数多...
    99+
    2022-06-04
    文件 转成 方法
  • Python 实战之ChatGPT + Python 实现全自动数据处理/可视化详解
     本文目录 一、引言 二、成果演示——口述式数据可视化 三、远原理述 四、实现过程   (一)环境配置   (二)申请OpenAI账号   (一)调用ChatGPT API   (二)设计AI身份,全自动处理数据 ...
    99+
    2023-09-07
    python chatgpt 信息可视化
  • Python实现自动化邮件发送过程详解
    使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。 操作前配置(以较为复杂的QQ邮箱举例,其他邮箱操作类似) 单击设置-账号,滑倒下方协议处,...
    99+
    2022-11-12
  • Python编解码问题及文本文件处理方法详解
    编解码器 在字符与字节之间的转换过程称为编解码,Python自带了超过100种编解码器,比如: ascii(英文体系) gb2312(中文体系) utf-...
    99+
    2022-11-12
  • Python实现自动化整理文件的示例代码
    目录自动化整理计算机文件1. 文件的自动分类2. 文件和文件夹的快速查找3. 自动清理重复文件4. 批量转换图片格式5. 按拍摄日期自动分类图片自动化整理计算机文件 通过Python...
    99+
    2022-11-11
  • Python实现处理apiDoc转swagger的方法详解
    目录需要转换的接口apiDoc格式swagger格式思路代码需要转换的接口 现在我需要转换的接口全是nodejs写的数据,而且均为post传输的json格式接口 apiDoc格式 a...
    99+
    2023-02-02
    Python apiDoc转swagger Python apiDoc swagger
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作