拿来就用!Python批量合并PDF的示例代码


Posted in Python onAugust 10, 2020

大家好,今天分享一个实用的办公脚本:将多个PDF合并为一个PDF,例如我手上现在有如下3个PDF分册,需要整合成一个完整的PDF

拿来就用!Python批量合并PDF的示例代码

如果换成你操作的话,是不是打开百度搜索:PDF合并,然后去第三方网站操作,可能会收费不说还担心文件泄漏,现在有请Python出场,简单快速,光速合并,拿走就用!

首先导入需要的库和路径设置

import os
from PyPDF2 import PdfFileReader, PdfFileWriter
if __name__ == '__main__':
  # 设置存放多个pdf文件的文件夹
  dir_path = r'C:\Scientific Research\Knowladge\Ophthalmology\Chinese Ophthalmology' 
  # 目标文件的名字
  file_name = "中华眼科学(第3版)合并版.pdf"

接着获取所有pdf文件的绝对路径,这里需要利用os库中的os.walk遍历文件和os.path.join拼接路径

for dirpath, dirs, files in os.walk(dir_path):
  print(dirpath)
  print(files)
# 结果返回当前路径、当前路径下文件夹,并以列表返回所有文件

拿来就用!Python批量合并PDF的示例代码

建议直接将需要合并的pdf放在一个文件夹,这样就无需再对文件后缀进行判断,包装成函数后如下:

def GetFileName(dir_path):
  file_list = [os.path.join(dirpath, filesname) \
         for dirpath, dirs, files in os.walk(dir_path) \
         for filesname in files]
  return file_list

调用该函数的结果

拿来就用!Python批量合并PDF的示例代码

现在建立合并PDF的函数

def MergePDF(dir_path, file_name):
  # 实例化写入对象
  output = PdfFileWriter()
  outputPages = 0
  # 调用上一个函数获取全部文件的绝对路径
  file_list = GetFileName(dir_path)

  for pdf_file in file_list:
    print("文件:%s" % pdf_file.split('\\')[-1], end=' ')

    # 读取PDF文件
    input = PdfFileReader(open(pdf_file, "rb"))
    # 获得源PDF文件中页面总数
    pageCount = input.getNumPages()
    outputPages += pageCount
    print("页数:%d" % pageCount)
    # 分别将page添加到输出output中
    for iPage in range(pageCount):
      output.addPage(input.getPage(iPage))
  print("\n合并后的总页数:%d" % outputPages)
  # 写入到目标PDF文件
  print("PDF文件正在合并,请稍等......")
  with open(os.path.join(dir_path, file_name), "wb") as outputfile:
    # 注意这里的写法和正常的上下文文件写入是相反的
    output.write(outputfile)
  print("PDF文件合并完成")

拿来就用!Python批量合并PDF的示例代码

可以看到虽然待合并的PDF文件比较大,但是依旧快速的合并成功!

最后附上完整代码,只需将代码中PDF的路径和文件名修改即可使用!

import os
from PyPDF2 import PdfFileReader, PdfFileWriter

def GetFileName(dir_path):
  file_list = [os.path.join(dirpath, filesname) \
         for dirpath, dirs, files in os.walk(dir_path) \
         for filesname in files]
  return file_list

def MergePDF(dir_path, file_name):
  output = PdfFileWriter()
  outputPages = 0
  file_list = GetFileName(dir_path)
  for pdf_file in file_list:
    print("文件:%s" % pdf_file.split('\\')[-1], end=' ')
    # 读取PDF文件
    input = PdfFileReader(open(pdf_file, "rb"))
    # 获得源PDF文件中页面总数
    pageCount = input.getNumPages()
    outputPages += pageCount
    print("页数:%d" % pageCount)
    # 分别将page添加到输出output中
    for iPage in range(pageCount):
      output.addPage(input.getPage(iPage))
  print("\n合并后的总页数:%d" % outputPages)
  # 写入到目标PDF文件
  print("PDF文件正在合并,请稍等......")
  with open(os.path.join(dir_path, file_name), "wb") as outputfile:
    # 注意这里的写法和正常的上下文文件写入是相反的
    output.write(outputfile)
  print("PDF文件合并完成")

if __name__ == '__main__':
  # 设置存放多个pdf文件的文件夹
  dir_path = r'C:\Scientific Research\Knowladge\Ophthalmology\Chinese Ophthalmology'
  # 目标文件的名字
  file_name = "中华眼科学(第3版)合并版.pdf"
  MergePDF(dir_path, file_name)

以上就是拿来就用!Python批量合并PDF的示例代码的详细内容,更多关于Python合并PDF的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用python绘制人人网好友关系图示例
Apr 01 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Python中模块string.py详解
Mar 12 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
Python hashlib模块用法实例分析
Jun 12 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
python安装sklearn模块的方法详解
Nov 28 Python
Python 发送邮件方法总结
Aug 10 #Python
Python getattr()函数使用方法代码实例
Aug 10 #Python
Python matplotlib模块及柱状图用法解析
Aug 10 #Python
Python如何操作docker redis过程解析
Aug 10 #Python
基于Python实现下载网易音乐代码实例
Aug 10 #Python
Python grequests模块使用场景及代码实例
Aug 10 #Python
基于Python pyecharts实现多种图例代码解析
Aug 10 #Python
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
用原生js做单页应用
2017/01/17 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
python中threading超线程用法实例分析
2015/05/16 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
python获取linux系统信息的三种方法
2020/10/14 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
主持人演讲稿
2014/05/13 职场文书
农村老人去世追悼词
2015/06/23 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
Python中requests做接口测试的方法
2021/05/30 Python