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 相关文章推荐
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python爬取京东的商品分类与链接
Aug 26 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
python并发2之使用asyncio处理并发
Dec 21 Python
Python登录注册验证功能实现
Jun 18 Python
Python Web编程之WSGI协议简介
Jul 18 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
Python3简单实现串口通信的方法
Jun 12 Python
python画环形图的方法
Mar 25 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python3基于sax解析xml操作示例
2018/05/22 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
KTV门卫岗位职责
2014/10/09 职场文书
自查自纠整改报告
2014/11/06 职场文书
英文产品推荐信
2015/03/27 职场文书
黑白记忆观后感
2015/06/18 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书