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函数参数*args**kwargs用法实例
Dec 04 Python
Python callable()函数用法实例分析
Mar 17 Python
python中ASCII码和字符的转换方法
Jul 09 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Django中的静态文件管理过程解析
Aug 01 Python
python实现猜数字游戏
Mar 25 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 Python
90行Python代码开发个人云盘应用
Apr 20 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
如何编写jquery插件
2017/03/29 jQuery
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
Python循环实现n的全排列功能
2019/09/16 Python
django列表筛选功能的实现代码
2020/03/27 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
绩效工资分配方案
2014/01/18 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
大学军训感言800字
2014/02/27 职场文书
联欢晚会主持词
2014/03/25 职场文书
班级心理活动总结
2014/07/04 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
神龙架导游词
2015/02/11 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js