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使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
深入浅析python定时杀进程
Jun 06 Python
Python 通配符删除文件的实例
Apr 24 Python
Python3处理HTTP请求的实例
May 10 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
flask中过滤器的使用详解
Aug 01 Python
django框架自定义用户表操作示例
Aug 07 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
js实现tab切换效果
2017/02/16 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
python 调用c语言函数的方法
2017/09/29 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
python的launcher用法知识点总结
2020/08/07 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
员工生日会策划方案
2014/06/14 职场文书
大学生党员个人总结
2015/02/13 职场文书
老员工辞职信范文
2015/05/12 职场文书
家长会开场白和结束语
2015/05/29 职场文书
实习感想范文
2015/08/10 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python