拿来就用!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爬虫获取京东手机图片的图文教程
Dec 29 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python读取文本绘制动态速度曲线
Jun 21 Python
python实现图片识别汽车功能
Nov 30 Python
python绘制漏斗图步骤详解
Mar 04 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
python绘制趋势图的示例
Sep 17 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python 破解加密zip文件的密码
Apr 22 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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/01/02 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP数组实例详解
2016/06/26 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
js 编写规范
2010/03/03 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python如何快速实现分布式任务
2017/07/06 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
python 实现有道翻译功能
2021/02/26 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
大学应届生的自我评价
2014/03/06 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
实习单位鉴定意见
2015/06/04 职场文书
跑吧孩子观后感
2015/06/10 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
大学生村官工作心得体会
2016/01/23 职场文书