拿来就用!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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
Python输出9*9乘法表的方法
May 25 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
python 远程执行命令的详细代码
Feb 15 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
php中ob函数缓冲机制深入理解
2015/08/03 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python 字符串定义
2009/09/25 Python
深入理解Python 代码优化详解
2014/10/27 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
python之super的使用小结
2018/08/13 Python
Python 画出来六维图
2019/07/26 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
摄影专业毕业生求职信
2014/03/13 职场文书
2014年会策划方案
2014/05/11 职场文书
普通话演讲稿
2014/09/03 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
PHP实现考试倒计时功能代码
2021/04/16 PHP