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脚本使得web页面上的代码高亮显示
Apr 24 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python中下标和切片的使用方法解析
Aug 27 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python boto和boto3操作bucket的示例
Oct 30 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 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
海贼王:最美的悬赏令!
2020/03/02 日漫
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
javascript中match函数的用法小结
2014/02/08 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python中的元类编程入门指引
2015/04/15 Python
python批量提取word内信息
2015/08/09 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
采购文员岗位职责
2013/11/20 职场文书
小学生秋游活动方案
2014/02/23 职场文书
施工员岗位职责
2014/03/16 职场文书
中文专业求职信
2014/06/20 职场文书
父亲节寄语大全
2015/02/27 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Python 文字识别
2022/05/11 Python