拿来就用!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 random模块(获取随机数)常用方法和使用例子
May 13 Python
python动态性强类型用法实例
May 09 Python
Python使用functools实现注解同步方法
Feb 06 Python
python实现停车管理系统
Nov 30 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
python中对数据进行各种排序的方法
Jul 02 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
pandas中ix的使用详细讲解
Mar 09 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
Python实现区域填充的示例代码
Feb 03 Python
Python使用openpyxl批量处理数据
Jun 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
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
如何执行一个shell程序
2012/11/23 面试题
公司前台辞职报告
2014/01/19 职场文书
群众路线剖析材料
2014/02/02 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
水浒传读书笔记
2015/06/25 职场文书
七一慰问简报
2015/07/20 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL