拿来就用!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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
python类的继承实例详解
Mar 30 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python实现自动上京东抢手机
Feb 06 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
python tqdm实现进度条的示例代码
Nov 10 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&&mysql)一
2006/10/09 PHP
php分页示例分享
2014/04/30 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
JQquery的一些使用心得分享
2012/08/01 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
javascript history对象详解
2017/02/09 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
python随机取list中的元素方法
2018/04/08 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
详解Python字符串切片
2019/05/20 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python批量解压zip文件的方法
2019/08/20 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
python palywright库基本使用
2021/01/21 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
歌唱比赛主持词
2014/03/18 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
新闻报道策划方案
2014/06/11 职场文书
校园文化标语
2014/06/18 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
驾驶员安全责任书
2014/07/22 职场文书
大学同学会活动方案
2014/08/20 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
写景作文评语集锦
2014/12/25 职场文书