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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
让代码变得更易维护的7个Python库
Oct 09 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python转换时间的图文方法
Jul 01 Python
使用Python的turtle模块画国旗
Sep 24 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Python 爬虫的原理
Jul 30 Python
python 使用三引号时容易犯的小错误
Oct 21 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php curl基本操作详解
2013/07/23 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python环境变量设置方法
2016/08/28 Python
Python实现Linux中的du命令
2017/06/12 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python感知机实现代码
2019/01/18 Python
使用Python 统计高频字数的方法
2019/01/31 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
如何使用python写截屏小工具
2020/09/29 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
高级电工工作职责
2013/11/21 职场文书
工作评语大全
2014/04/26 职场文书
中国合伙人观后感
2015/06/02 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
python 如何做一个识别率百分百的OCR
2021/05/29 Python
利用Python实现Picgo图床工具
2021/11/23 Python
mysql查找连续出现n次以上的数字
2022/05/11 MySQL