PDF 和 Word 文档是二进制文件。

1.  PDF 文档

PDF表示Portable Document Format(可移植文档格式),使用.pdf文件扩展名。用于处理PDF的模块是PyPDF2,这个模块是区分大小写的。

1)  从 PDF 提取文本

PyPDF2无法从PDF文档中提取图像,表格或其他媒体,但是可以提取文本。提取过程如下:

a)     以“rb”模式打开PDF文件。

b)     创建PdfFileReader对象。

c)     获取Paged对象。

d)     使用extractText()返回文本的字符串。

示例:

>>> import PyPDF2>>> pdfFileObj =open('meetingminutes.pdf','rb')>>> pdfReader =PyPDF2.PdfFileReader(pdfFileObj)>>> pdfReader.numPages19>>> pageObj = pdfReader.getPage(0)>>> pageObj.extractText()'OOFFFFIICCIIAALL  BBOOAARRDD MMIINNUUTTEESS   Meeting of\nMarch 7\n, 2014\n        \n     The Board of Elementary and SecondaryEducation shall provide leadership and \ncreate policies for education thatexpand opportunities for children, empower \nfamilies and communities, andadvance Louisiana in an increasingly \ncompetitive glob\nal market.\n BOARD \nof ELEMENTARY\n and \n SECONDARY\n EDUCATION\n 

2)  解密 PDF

某些 PDF文档有加密功能,以防止别人阅读,只有在打开文档时提供密码才能阅读。假设我们打开的PDF文件加密密码为:rosebud。

a)     使用PdfFileReader对象的isEncrypted属性判断是否加密。已经加密返回True,没有加密返回False。

b)     向decrypt(‘pwd’)方法传入一个密码进行解密。密码正确返回1,密码错误返回0。

示例:

>>> import PyPDF2>>> pdfReader =PyPDF2.PdfFileReader(open('encrypted.pdf', 'rb'))>>> pdfReader.isEncryptedTrue>>> pdfReader.getPage(0)Traceback (most recent call last):File "<pyshell#173>", line1, in <module>pdfReader.getPage()--snip--File"C:\Python34\lib\site-packages\PyPDF2\pdf.py", line 1173, ingetObjectraise utils.PdfReadError("file has notbeen decrypted")PyPDF2.utils.PdfReadError: file has notbeen decrypted>>> pdfReader.decrypt('rosebud')1>>> pageObj = pdfReader.getPage(0)

3)  创建PDF

PyPDF2 写入 PDF 的能力,仅限于从其他 PDF 中拷贝页面、旋转页面、重叠页面和加密文件。同时,不能直接编辑PDF,必须创建一个新的PDF。流程如下:

a)     打开一个或多个已有的 PDF(源 PDF),得到 PdfFileReader 对象。

b)     2.创建一个新的 PdfFileWriter 对象。

c)     3.将页面从PdfFileReader 对象拷贝到 PdfFileWriter 对象中。

d)     4.最后,利用PdfFileWriter 对象写入输出的 PDF。

4)  拷贝页面

PyPDF2 不能在PdfFileWriter 对象中间插入页面,addPage()方法只能够在末尾添加页面。

>>>import PyPDF2>>>pdf1File =open('meetingminutes.pdf', 'rb')>>>pdf2File =open('meetingminutes2.pdf', 'rb')>>>pdf1Reader =PyPDF2.PdfFileReader(pdf1File)>>>pdf2Reader =PyPDF2.PdfFileReader(pdf2File)>>>pdfWriter =PyPDF2.PdfFileWriter()>>>for pageNum inrange(pdf1Reader.numPages): pageObj = pdf1Reader.getPage(pageNum)pdfWriter.addPage(pageObj)>>>for pageNum inrange(pdf2Reader.numPages):pageObj = pdf2Reader.getPage(pageNum)pdfWriter.addPage(pageObj)>>> pdfOutputFile =open('combinedminutes.pdf', 'wb')>>> pdfWriter.write(pdfOutputFile)>>> pdfOutputFile.close()>>> pdf1File.close()>>> pdf2File.close()

5)  旋转页面

利用rotateClockwise()和 rotateCounterClockwise()方法,PDF文档可以顺时针旋转 90 度的整数倍。示例:

>>>import PyPDF2>>>minutesFile = open('meetingminutes.pdf', 'rb')>>>pdfReader = PyPDF2.PdfFileReader(minutesFile)>>>page = pdfReader.getPage(0)>>>page.rotateClockwise(90){'/Contents':[IndirectObject(961, 0), IndirectObject(962, 0),--snip--}>>>pdfWriter = PyPDF2.PdfFileWriter()>>>pdfWriter.addPage(page)>>>resultPdfFile = open('rotatedPage.pdf', 'wb')>>>pdfWriter.write(resultPdfFile)>>>resultPdfFile.close()>>>minutesFile.close()

6)  叠加页面

通过调用Page对象的mergePage()方法,PyPDF2 也可以将一页的内容叠加到另一页上,这可以用来在页面上添加公司标志、时间戳或水印。示例:

>>>import PyPDF2>>>minutesFile = open('meetingminutes.pdf', 'rb')>>>pdfReader = PyPDF2.PdfFileReader(minutesFile)>>>minutesFirstPage = pdfReader.getPage(0)>>>pdfWatermarkReader = PyPDF2.PdfFileReader(open('watermark.pdf', 'rb'))>>>minutesFirstPage.mergePage(pdfWatermarkReader.getPage(0))>>>pdfWriter = PyPDF2.PdfFileWriter()>>>pdfWriter.addPage(minutesFirstPage)>>> forpageNum in range(1, pdfReader.numPages):pageObj = pdfReader.getPage(pageNum)pdfWriter.addPage(pageObj)>>>resultPdfFile = open('watermarkedCover.pdf', 'wb')>>>pdfWriter.write(resultPdfFile)>>>minutesFile.close()>>>resultPdfFile.close()

7)  加密 PDF

>>> import PyPDF2>>> pdfFile =open('meetingminutes.pdf', 'rb')>>> pdfReader =PyPDF2.PdfFileReader(pdfFile)>>> pdfWriter =PyPDF2.PdfFileWriter()>>> for pageNum inrange(pdfReader.numPages):pdfWriter.addPage(pdfReader.getPage(pageNum))>>> pdfWriter.encrypt('swordfish')>>> resultPdf =open('encryptedminutes.pdf', 'wb')>>> pdfWriter.write(resultPdf)>>> resultPdf.close()

《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(1)】相关推荐

  1. 《Python编程快速上手——让繁琐工作自动化》笔记:3.11 实践项目 Collatz 序列(考拉咨猜想)

    编写一个名为collatz()的函数,它有一个名为number的参数: 如果参数是偶数,那么collatz()就打印出number//2,并返回该值: 如果number是奇数,那么collatz()就 ...

  2. 近期开通《Python编程快速上手-让繁琐工作自动化》视频教学

    <Python编程快速上手-让繁琐工作自动化>视频教学,包括课件.PDF.代码.视频.思维导图等相关内容,敬请期待.

  3. 导入python标准数学函数模块的语句_《Python编程快速上手——让繁琐工作自动化》——2.8 导入模块...

    本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第2章,第2.8节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...

  4. 《Python编程快速上手——让繁琐工作自动化》——第一部分 Python编程基础 第1章 Python基础 1.1 在交互式环境中输入表达式...

    本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第1章,第1.1节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...

  5. python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...

    入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...

  6. 《Python编程快速上手 让繁琐工作自动化》pdf

    <div id="article_content" class="article_content tracking-ad" data-mod=" ...

  7. python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

    豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你. 1.UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与Linux相结合的 ...

  8. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...

    image.png <Python编程快速上手 让繁琐工作自动化>完整版PDF 提取码:7qm4 3.jpg 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 ...

  9. 《Python编程快速上手——让繁琐工作自动化》——2.5 控制流的元素

    本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第2章,第2.5节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...

  10. python经典书记必读:Python编程快速上手 让繁琐工作自动化

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注 ...

最新文章

  1. 青茶什么时候拆_篮球:挡拆是艺术,绝知要躬行,最简单也是最复杂的篮球战术...
  2. org.jboss.netty.internal.LoggerConfigurator.DESCRIBED is already registered 的解决办法
  3. 设计模式--解析器(Interpreter)模式
  4. php读取部分文章显示不出来了,织梦使用PHP5.3环境时遇到部分文章出现”读取附加信息出错“的解决办法jz1...
  5. 消息队列系列二(IOT中消息队列的应用)
  6. 联机日志损坏时的恢复(非正常关闭数据库)
  7. 98k用计算机图片,98K (HandClap)_谱友园地_中国曲谱网
  8. 前端学习(2567):指令的本质
  9. vue 插件 滑块验证_Vue插件之滑动验证码
  10. 【shell】echo不显示变量中的多个空格
  11. 微型计算机原理与接口技术 教案,微机原理与接口技术课程教与学(教学大纲)...
  12. PS 前端技能一 白色背景图片变为透明的图片
  13. 《逆袭进大厂》第十三弹之Redis重点篇
  14. 视频转gif软件哪个好
  15. 网易邮箱好用还是TOM邮箱好用?企业邮箱可绑定微信吗?
  16. Postman的tests断言
  17. 在职场遇到一个总是说话带刺的同事怎么相处?
  18. Android 更改鼠标样式
  19. java学习,入门篇-HelloWorld
  20. Apollo Planning决策规划算法代码详细解析 (5):规划算法流程介绍

热门文章

  1. ubuntu 下stl obj ply 3dx fbx等各种格式转pcd方法
  2. 奥塔在线:Redis5通过源码进行安装及卸载
  3. 中国FW贝尔探头市场现状研究分析与发展前景预测报告(2022)
  4. 关于“上海电信IPTV系统开机广告不能关闭“问题的看法
  5. winform实现拖曳功能
  6. Before start of result set报错
  7. 农业信息化技术与应用案例test
  8. day22-作业贝壳租房100页数据
  9. virtualBox新建虚拟电脑
  10. 面对疫情防控的多摄像头社交距离检测方案