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 相关文章推荐
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python中str.join()简单用法示例
Mar 20 Python
Python操作MySQL数据库的方法
Jun 20 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
Python3.5运算符操作实例详解
Apr 25 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
Python使用python-docx读写word文档
Aug 26 Python
python创建学生管理系统
Nov 22 Python
Python 项目转化为so文件实例
Dec 23 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
pycharm配置QtDesigner的超详细方法
Jan 25 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知识收集
2012/08/20 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
摘自启点的main.js
2008/04/20 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
法律系毕业生自荐信范文
2014/03/27 职场文书
大学生毕业求职信
2014/06/12 职场文书
社区宣传标语口号
2015/12/26 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers