拿来就用!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中的输入和输出功能进行读取和写入的教程
Apr 14 Python
Python实现多线程抓取妹子图
Aug 08 Python
全面了解python字符串和字典
Jul 07 Python
Python上下文管理器和with块详解
Sep 09 Python
python中实现k-means聚类算法详解
Nov 11 Python
Python Flask-web表单使用详解
Nov 18 Python
python实现聊天小程序
Mar 13 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python对接ihuyi实现短信验证码发送
May 10 Python
Python尾递归优化实现代码及原理详解
Oct 09 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代码把全角数字转为半角数字
2007/12/10 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
Python使用gensim计算文档相似性
2016/04/10 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python 列表推导式使用详解
2019/08/29 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python 制作网站小说下载器
2021/02/20 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
作风转变心得体会
2014/09/02 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书