python如何将多个PDF进行合并


Posted in Python onAugust 13, 2019

背景

由于工作性质,经常面对不同的问题,某些场景下SQL+Excel、常用办公软件不能处理,这时到网上找一些案例,自己动手用python处理。后续,借此博客记录比较典型的处理过程。

后续,陆续实际处理的问题,如

1. 合并PDF
2. 拆分PDF
3. 敏感字段MD5脱敏
4. 从非架构化的大文本文件中提取指定条件的记录

需求

工作和生活中有时会遇到将多个pdf文件,合并成一个大文件的情况。例如,扫描时,普通扫描仪或打印机一页生成一个PDF,而一份资料实际多页。Adobe的收费版有合并功能,我们可以自己动手解决。根据网上搜索了几个合并pdf的例子,都是2.X环境下的程序,因此将部分函数替换为3.x环境下。

合并多个PDF的python

'''# -*- coding:utf-8*-'''
import sys
import importlib
importlib.reload(sys)

import os
import os.path
from PyPDF2 import PdfFileReader, PdfFileWriter 
import time
time1=time.time()

# 使用os模块walk函数,搜索出某目录下的全部pdf文件
######################获取同一个文件夹下的所有PDF文件名#######################
def getFileName(filepath):
 file_list = []
 for root,dirs,files in os.walk(filepath):
  for filespath in files:
   # print(os.path.join(root,filespath))
   file_list.append(os.path.join(root,filespath))

 return file_list



##########################合并同一个文件夹下所有PDF文件########################
def MergePDF(filepath,outfile):
 output=PdfFileWriter()
 outputPages=0
 in_file_path =filepath +r'input/'
 print(in_file_path)
 pdf_fileName=getFileName(in_file_path)
 i=0
 for each in pdf_fileName:
  i=i+1
  print(i,each)
  # 读取源pdf文件
  input = PdfFileReader(open(each, "rb"))

  # 如果pdf文件已经加密,必须首先解密才能使用pyPdf
  if input.isEncrypted == True:
   input.decrypt("map")

  # 获得源pdf文件中页面总数
  pageCount = input.getNumPages()
  outputPages += pageCount
  print("PageCount: ",pageCount)

  # 分别将page添加到输出output中
  for iPage in range(0, pageCount):
   output.addPage(input.getPage(iPage))


 print("All Pages Number:"+str(outputPages))
 # 最后写pdf文件
 out_file_path=filepath+r'output/'
 outputStream=open(out_file_path+outfile,"wb")
 output.write(outputStream)
 outputStream.close()
 print( "finished")


if __name__ == '__main__':
 file_dir = r'D:/扫描文件/'  # 待合并PDF 所在文件夹
 out=u"某某资料合并文件.pdf"  # 合并后文件名称
 MergePDF(file_dir,out)
 time2 = time.time()
 print( u'总共耗时:' + str(time2 - time1) + 's')

使用注意事项

1、程序第63行,默认指定了一个目录,“D:\扫描文件“,然后在其下建“\input”和“\output”两个子文件夹。
2、将待合并的pdf文件放在“\input”中,合并后的文件默认为“某某资料合并文件.pdf”,可在程序第64行修改你期望的文件名,合并后文件输出到“\output”。
3、合并多个文件时,合并顺序为文件名升序。

补充说明,如何使用python,建议学一本免费的电子书《编程小白的第一本Python入门书》,网上可搜。

最后,如果哪位朋友有兴趣,可以将程序第63和64行,加一个图形界面,用户在window下选择input 和output,选择输出文件名,然后做一个可执行文件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
深入了解Django View(视图系统)
Jul 23 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
使用python计算三角形的斜边例子
Apr 15 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
python 模块重载的五种方法
Apr 24 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
python批量读取文件名并写入txt文件中
Sep 05 #Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 #Python
Python学习笔记之列表推导式实例分析
Aug 13 #Python
Django中create和save方法的不同
Aug 13 #Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 #Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 #Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 #Python
You might like
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
JavaScript事件列表解说
2006/12/22 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python随机数random模块使用指南
2016/09/09 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python 元组操作总结
2019/09/18 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
工程力学专业毕业生求职信
2013/10/06 职场文书
中学运动会广播稿
2014/01/19 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫