拿来就用!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通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
Python数据类型详解(四)字典:dict
May 12 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
python通过链接抓取网站详解
Nov 20 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Keras设置以及获取权重的实现
Jun 19 Python
python Polars库的使用简介
Apr 21 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 变量定义方法
2009/06/14 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
python条件和循环的使用方法
2013/11/01 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Python实现验证码识别
2020/06/15 Python
详解python变量与数据类型
2020/08/25 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python在地图上画比例的实例详解
2020/11/13 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
办公室主任岗位承诺书
2014/05/29 职场文书
合同意向书范本
2014/07/30 职场文书
街道务虚会发言材料
2014/10/20 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
升学宴学生答谢词
2015/01/05 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书