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切换hosts文件代码示例
Dec 31 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
解决python 输出是省略号的问题
Apr 19 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
对python判断ip是否可达的实例详解
Jan 31 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
基于django传递数据到后端的例子
Aug 16 Python
Django框架安装方法图文详解
Nov 04 Python
Django异步任务线程池实现原理
Dec 17 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 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/05/09 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
Python中的包和模块实例
2014/11/22 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python箱型图处理离群点的例子
2019/12/09 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python如何写个俄罗斯方块
2020/11/06 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
公司2014年度工作总结
2014/12/10 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL