拿来就用!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多线程ctrl+c退出问题解决方案
Oct 23 Python
python爬取51job中hr的邮箱
May 14 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
python内置数据类型之列表操作
Nov 12 Python
基于python实现KNN分类算法
Apr 23 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
如何基于python实现脚本加密
Dec 28 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
python re.match()用法相关示例
Jan 27 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本地服务器分享
2013/02/19 PHP
javascript 验证日期的函数
2010/03/18 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
初识Node.js
2014/09/03 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
JS判断数组那点事
2017/10/10 Javascript
vue实现文件上传功能
2018/08/13 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python的UTC时间转换讲解
2019/02/26 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
次世代生活态度:Hypebeast
2018/07/05 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
大学毕业生通用自荐信范文
2013/10/31 职场文书
数学教育专业求职信
2014/07/22 职场文书
2015学校年度工作总结
2015/05/11 职场文书
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
html中两种获取标签内的值的方法
2022/06/16 jQuery