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发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
python从入门到精通(DAY 1)
Dec 20 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
python与C互相调用的方法详解
Jul 14 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
用python批量移动文件
Jan 14 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
php上传文件的增强函数
2010/07/21 PHP
php牛逼的面试题分享
2013/01/18 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
详解Python中的相对导入和绝对导入
2017/01/06 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
企事业单位求职者的自我评价
2013/12/28 职场文书
取保候审保证书
2014/04/30 职场文书
环境整治工作方案
2014/05/18 职场文书
个人求职自荐信范文
2014/06/20 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
运动会100米加油稿
2015/07/21 职场文书
《学会看病》教学反思
2016/02/17 职场文书