拿来就用!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下MySQLdb用法实例分析
Jun 08 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python实现自动清理重复文件
Aug 24 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
python代数式括号有效性检验示例代码
Oct 04 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
聊聊pytorch测试的时候为何要加上model.eval()
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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
PHP伪静态写法附代码
2008/06/20 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
PHP 代码规范小结
2012/03/08 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
js 单引号 传递方法
2009/06/22 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
Python+Opencv识别两张相似图片
2020/03/23 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
自我鉴定范文
2013/11/10 职场文书
小学生美德少年事迹
2014/02/02 职场文书
《颐和园》教学反思
2014/02/26 职场文书
2015年党建工作总结
2015/03/30 职场文书
创业计划书之花店
2019/09/20 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript