拿来就用!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中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
Python import自定义模块方法
Feb 12 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
python类装饰器用法实例
Jun 04 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
利用python画出AUC曲线的实例
Feb 28 Python
Python关于OS文件目录处理的实例分享
May 23 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
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python如何在终端里面显示一张图片
2016/08/17 Python
django框架如何集成celery进行开发
2017/05/24 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
EntityManager都有哪些方法
2013/11/01 面试题
运动会通讯稿50字
2014/01/30 职场文书
安全责任书模板
2014/07/22 职场文书
发布会邀请函
2015/01/31 职场文书
建房合同协议书
2016/03/21 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
一文带你探究MySQL中的NULL
2021/11/11 MySQL
Mysql如何查看是否使用到索引
2022/12/24 MySQL