使用PyPDF2模块处理PDF文件通用方法技巧

使用PyPDF2模块处理PDF文件通用方法技巧基本概念:PDF和Word文档是二进制文件,除了文本之外还保存字体,颜色,布局等信息。处理PDF文件,使用PyPDF2模块,PyPDF2不能从PDF文档中提取图像、图表或其他媒体,但可提取文本,作为字符串返回。  读取PDF文件步骤:首先以读二进制模式打开PDF文件,然后将打开文件File对象传递给PyPDF2.PdfFileReader()函数,例如: …

大家好,又见面了,我是你们的朋友全栈君。

  1. 基本概念:PDF和Word文档是二进制文件,除了文本之外还保存字体,颜色,布局等信息。
  2. 处理PDF文件,使用PyPDF2模块,PyPDF2不能从PDF文档中提取图像、图表或其他媒体,但可提取文本,作为字符串返回。
       读取PDF文件步骤: 首先以读二进制模式打开PDF文件,然后将打开文件File对象传递给PyPDF2.PdfFileReader()函数,例如:
       pdf=open(r’C:/Users/fmz/Desktop/rotate.pdf’,‘rb’)
       pdfreader=PyPDF2.PdfFileReader(pdf)
       读取的文档的总页数保存在PdfFileReader对象的numPages属性中,使用pdfreader.numPages可得总页数
       从一页中提取文本,需要先取得Page对象,使用pdfreader.getPage(传入页码顺序,从0开始)。取得Page对象后调用它的
       extractText()方法,即Page.extractText()则返回该页文本的字符串(文本提取并不完美,有时会缺失一些文本)
  3. 解密PDF :所有的PdfFileReader对象都有一个isEncrypted属性,如果加密返回True否则返回False。在文件用正确的口令
       解密之前,尝试调用函数来读取文件会返回错误。解密PDF使用pdfreader.decrypt(‘口令字符串’)函数,提供正确的口令返回1
       否则返回0。
  4. 创建PDF:使用PdfFileWriter对象创建PDF例如pdfwriter=PyPDF2.PdfFileWriter(),但PyPDF2模块不可以利用其将任何文
       本写入PDF,该对象仅限从其他PDF中拷贝页面、旋转页面、重叠页面以及加密文件。PyPDF2模块不允许直接编辑PDF,必须
       创建一个新的PDF,其一般步骤为:
       1) 打开一个或多个已有的PDF得到PdfFileReader对象;
       2) 创建一个新的PdfFileReader对象;
       3) 将页面从PdfFileReader对象拷贝到PdfFileWriter对象中;
       4) 最后利用PdfFileWriter对象写入输出的PDF。
       实际生成文件需调用PdfFileWriter对象的write()方法。write()方法接受一个普通的以写二进制模式?打开的File对象。
  5. 拷贝页面:得到PdfFileReader对象后,在其上调用getPage()取得Page对象,然后将Page对象传递给PdfFileWriter对象的
        addPage()方法,例如pdfwriter.addPage(page对象),在拷贝页面完成后,向PdfFileWriter对象的write()方法传入一个File
        对象,例如使用下列语句即可实现新PDF的写入。
         pdfout=open(r’combinedminutes.pdf’,‘wb’)
         pdfwriter.write(pdfout)
         pdfout.close()
  6. 旋转页面:对Page对象使用rotateClockwise()(顺时针旋转)和rotateCounterClockwise()(逆时针旋转)方法可使PDF文
        档页面旋转90度的整数倍,向这些方法传入90,180,270就可以了。例如Page.rotateClockwise(90)将页面顺时针旋转90度。
  7. 叠加页面:PyPDF2模块可将一页的内容叠加到另一页上实现在页面上添加公司标志,时间戳或水印等。对Page对象调用
       mergePage(叠加的Page对象)方法可实现page的叠加,例如使用FirstPage.mergePage(pdfreader.getPage(0))语句可实现
        将pdfreader对象的第一页叠加到FirstPage页上。
  8. 加密PDF:在调用write()方法保存文件之前,对PdfFileWriter对象调用encrypt(‘口令字符串’)方法可实现对文档的加密。PDF
       文档可以有一个用户口令(允许查看该PDF)和一个拥有者口令(允许设置打印、注释、提取文本和其他功能的许可)。用户
        口令和拥有者口令分别是encrypt()的第一个和第二个参数,如果只传入一个字符串,那它将作为两个口令。例如:
        pdfwriter.encrypt(‘swordfish’)
        open(r’combinedminutes.pdf’,‘wb’)
        pdfwriter.write(pdfout)
        pdfout.close()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152406.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月23日 上午11:00
下一篇 2022年6月23日 上午11:00


相关推荐

  • redis分布式锁两种应用场景

    redis分布式锁两种应用场景分布式锁 是用来解决分布式应用中 并发冲突 的一种常用手段 实现方式一般有基于 zookeeper 及基于 redis 二种 具体到业务场景中 我们要考虑二种情况 一 抢不到锁的请求 允许丢弃 即 忽略 比如 一些不是很重要的场景 比如 监控数据持续上报 某一篇文章的 已读 未读 标识位更新 对于同一个 id 如果并发的请求同时到达 只要有一个请求处理成功 就算成功 用活动图表示如下 二 并发请求 不论哪一条都必须要处理的场景 即 不允许丢数据 比如 一个订单 客户正在前台修改地址

    2026年3月17日
    2
  • c++ stl 优先队列_低优先级队列要等几局

    c++ stl 优先队列_低优先级队列要等几局priority_queue文章目录priority_queuepriority_queue的使用priority_queue在OJ中的使用数组中第k个最大元素priority_queue模拟实现push的模拟实现pop模拟实现迭代器区间构造函数模拟实现size的模拟实现empty的模拟实现top的模拟实现swap的模拟实现仿函数typename仿函数的变异玩法翻译:优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元

    2026年2月21日
    5
  • 基于单片机超声波测距系统的设计_单片机类毕业设计

    基于单片机超声波测距系统的设计_单片机类毕业设计Hi,大家好,这里是丹成学长,今天向大家介绍一个超级炫酷的单片机项目,非常适合用于毕设基于单片机的超声波雷达设计大家可用于课程设计或毕业设计1、绘制雷达表盘2、增加扫描线3、实现拖影效果4、实现目标扫描点显示(渐出效果)1、准备器材(arduinoUNO、360度舵机、超声波传感器、扩展板)2、雷达平台1、串口通讯接受数据2、扫描点的显示函数改造超声波检测原理线电波(微波)从雷达发射到自由空间,其中一些波被反射物体拦截,并从不同的方向上进行反射。这些波中一些波会引回雷达,被雷达接受并且

    2025年11月1日
    3
  • 算法总结——大整数加法

    算法总结——大整数加法问题描述 nbsp 求两个不超过 200 位的非负整数的和 输入数据有两行 每行是一个不超过 200 位的非负整数 没有多余的前导 0 输出要求一行 即相加后的结果 结果里不能有多余的前导 0 即如果结果是 342 那么就不能输出为 0342 nbsp 输入样例输出样例 OutputSample

    2026年3月26日
    2
  • Linux基础IO详解:从文件描述符到缓冲区

    Linux基础IO详解:从文件描述符到缓冲区

    2026年3月16日
    3
  • ELF文件介绍

    ELF文件介绍ELF 文件 大名叫 Executablean 作为一种文件 那么肯定就需要遵守一定的格式 从宏观上看 可以分成四个部分 图中的这几个概念 如果不明白的话也没关系 下面我会逐个说明的 在 Linux 系统中 一个 ELF 文件主要用来表示 3 种类型的文件 1 可执行文件 2 目标文件 3 共享文件既然可以用来表示 3 种类型的文件 那么在文件中 肯定有一个地方用来区分这 3 种情况 在我的头部内容中 就存在一个字段 用来表示

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号