拿来就用!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 Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Django保护敏感信息的方法示例
May 09 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
Python with语句和过程抽取思想
Dec 23 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
基于Python生成个性二维码过程详解
Mar 05 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Python requests上传文件实现步骤
Sep 15 Python
Django xadmin安装及使用详解
Oct 26 Python
Python读取pdf表格写入excel的方法
Jan 22 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 XML操作类DOMDocument
2009/12/16 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php实现的短网址算法分享
2014/06/20 PHP
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
python进阶教程之异常处理
2014/08/30 Python
python实现简单ftp客户端的方法
2015/06/28 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
python实现超级玛丽游戏
2020/03/18 Python
python和php学习哪个更有发展
2020/06/17 Python
Python 读取位于包中的数据文件
2020/08/07 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
孝敬父母的活动方案
2014/08/28 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
个人向公司借款协议书
2014/10/09 职场文书
文艺晚会开场白
2015/05/29 职场文书
行政处罚决定书
2015/06/24 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android