Python PyPDF2模块安装使用解析


Posted in Python onJanuary 19, 2020

这篇文章主要介绍了Python PyPDF2模块安装使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

PyPDF2模块主要的功能是分割或合并PDF文件,裁剪或转换PDF文件中的页面。

0、安装PyPDF2的模块

pip install PyPDF2

1、常用的函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2020/1/15 13:38
# @Author : suk
# @File  : pyxl.py
# @Software: PyCharm
import PyPDF2

reader = PyPDF2.PdfFileReader(open('linux.pdf', 'rb'))
print(reader.getNumPages()) # 获取pdf总页数
print(reader.isEncrypted) # 判断是否有加密
page = reader.getPage(4) # 获取第四页
print(page.extractText()) # 获取第四页的内容
print(reader.getDocumentInfo()) # 获取PDF元信息,即创建时间,作者,标题等

2、读取PDF文件,取指定页数,写入到硬盘上的示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import PyPDF2

reader = PyPDF2.PdfFileReader(open('linux.pdf', 'rb'))

output = PyPDF2.PdfFileWriter()

output.addPage(reader.getPage(1))
output.addPage(reader.getPage(4))
output.addPage(reader.getPage(5))
print(output.getNumPages()) # 获取写入页的总页数

output.encrypt('123456')
outputStream = open('PyPDF2-output.pdf', 'wb')
output.write(outputStream)
outputStream.close()

3、读取PDF某一页,旋转180度后,写入到新的PDF文件的示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import PyPDF2

reader = PyPDF2.PdfFileReader(open('linux.pdf', 'rb'))

page = reader.getPage(0) # 获取第0页
page.rotateClockwise(180) # 旋转180度

writer = PyPDF2.PdfFileWriter() # 创建PDF写入的对象
writer.addPage(page)

outputStream = open('rotate-page-test.pdf', 'wb') # 创建一个PDF文件
writer.write(outputStream) # 往文件写入PDF数据
outputStream.close() # 写入流

4、PDF增加水印的示例

注意:水印模板可以利用WORD文档写好文字,转为PDF即可

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import PyPDF2

reader = PyPDF2.PdfFileReader(open('linux.pdf', 'rb')) # 增加水印的原文件

watermark = PyPDF2.PdfFileReader(open('水印模板.pdf', 'rb')) # 水印的模板

writer = PyPDF2.PdfFileWriter() # 写入PDF的对象

for i in range(reader.getNumPages()):
  page = reader.getPage(i)
  page.mergePage(watermark.getPage(0)) # 将原文件与水印模板合并
  writer.addPage(page) # 增加到写入对象中

outputStream = open('watermark-test-linux.pdf', 'wb') # 打开一个写入硬盘的文件对象
writer.write(outputStream) # 将合并好的数据,写入硬盘中
outputStream.close() # 关闭文件句柄

测试效果

Python PyPDF2模块安装使用解析

5、合并多个指定的PDF文件的示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PyPDF2 import PdfFileMerger

merger = PdfFileMerger() # 创建一个合并的对象

input1 = open('01PDF.pdf', 'rb')
input2 = open('02PDF.pdf', 'rb')
input3 = open('03PDF.pdf', 'rb')

merger.append(fileobj=input1, pages=(0, 3)) # 合并文件1的0到3页
merger.merge(position=2, fileobj=input2, pages=(0, 1)) # 合并文件2的0到1页
merger.append(fileobj=input3) # 合并文件的所有页

output = open('document-output.pdf', 'wb') # 保存硬盘上
merger.write(output) # 写入到硬盘上
output.close() # 关闭文件句柄

6、批量合并指定目录的PDF文件的示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import PyPDF2
import os
import glob

def get_all_pdf_files(path):
  """获取指定目录的所有pdf文件名"""
  all_pdfs = glob.glob('{0}/*.pdf'.format(path))
  all_pdfs.sort(key=str.lower) # 排序
  return all_pdfs

def main():
  path = os.getcwd()
  all_pdfs = get_all_pdf_files(path)
  if not all_pdfs:
    raise SystemExit('没有可用的PDF类型文件')

  merger = PyPDF2.PdfFileMerger()

  first_obj = open(all_pdfs[0], 'rb') # 打开第一个PDF文件
  merger.append(first_obj) # 增加到合并的对象中

  file_objs = []
  for pdf in all_pdfs[1:]: # 读取所有的文件对象
    file_objs.append(open(pdf, 'rb'))

  for file_obj in file_objs:
    reader = PyPDF2.PdfFileReader(file_obj)
    merger.append(fileobj=file_obj, pages=(1, reader.getNumPages()))

  outputStream = open('merge-pdfs.pdf', 'wb')
  merger.write(outputStream)
  outputStream.close()
  for file_obj in file_objs: # 批量关闭文件句柄
    file_obj.close()

if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 提取文件的小程序
Jul 29 Python
Python 多线程Threading初学教程
Aug 22 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Python3.5 创建文件的简单实例
Apr 26 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
python文件拆分与重组实例
Dec 10 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python issubclass 和 isinstance函数
Jul 25 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
python实现小世界网络生成
Nov 21 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
详解python中各种文件打开模式
Jan 19 #Python
python opencv如何实现图片绘制
Jan 19 #Python
python实现加密的方式总结
Jan 19 #Python
TensorFlow tensor的拼接实例
Jan 19 #Python
python通过opencv实现图片裁剪原理解析
Jan 19 #Python
Python 一行代码能实现丧心病狂的功能
Jan 18 #Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 #Python
You might like
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
python os.fork() 循环输出方法
2019/08/08 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
一套带答案的C++笔试题
2014/01/10 面试题
农行实习自我鉴定
2013/09/22 职场文书
公司承诺函范文
2015/01/21 职场文书
疾病证明书
2015/06/19 职场文书
仓库管理制度范本
2015/08/04 职场文书
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers