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项目发布为exe可执行程序过程分享
Oct 23 Python
基于python的七种经典排序算法(推荐)
Dec 08 Python
python基础教程之Filter使用方法
Jan 17 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
pytorch标签转onehot形式实例
Jan 02 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
Python+Tkinter打造签名设计工具
Apr 01 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
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
js模拟微博发布消息
2017/02/23 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python星号*与**用法分析
2018/02/02 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python随机数函数代码实例解析
2020/02/09 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
自主实习接收函
2014/01/13 职场文书
学生党支部先进事迹
2014/02/04 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
保护环境倡议书100字
2014/05/19 职场文书
本科生就业推荐信
2014/05/19 职场文书
2014年冬季防火方案
2014/05/21 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js