请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Python玩转PDF的各种骚操作

[复制链接]
查看: 805|回复: 3

18

主题

44

帖子

80

积分

等待验证会员

积分
80
发表于 2019-6-11 14:00 | 显示全部楼层 |阅读模式






Portable Document Format(可移植文档格式),大概PDF是一种文件格式,可以用于跨操纵系统的显现和文档交换。虽然PDF最初是由Adobe发现的,但它现在是由国际标准化构造(ISO)保护的开放标准。你可以经过利用PyPDF2包在Python中处置已先存在的PDF。
PyPDF2是一个纯Python包,可用于很多分歧范例的PDF操纵。
本文将带你领会若何履行以下操纵:

  • 从Python中提取PDF中的文档信息
  • 扭转页面
  • 合并PDF
  • 拆分PDF
  • 增加水印
  • 加密PDF






一、pyPdf,PyPDF2和PyPDF4的历史


最初的pyPdf软件包于2005年公布。pyPdf的最初一个正式版本是在2010年。大约一年后,一家名为Phasit的公司援助了一个名为PyPDF2的pyPdf分支。该代码编写为向后与原始代码兼容,而且用了好多年,结果一向很好,其最初一个版本是在2016年。
有一个名为PyPDF3的软件包简短系列版本,然后该项目被重命名为PyPDF4。一切这些项目都完全不异,但pyPdf和PyPDF2 +之间的最大区分在于后者版本增加了Python 3支持。Python 3的原始pyPdf有一个分歧的Python 3分支,可是这个分支已经多年没有保护了。
虽然比来放弃了PyPDF2,但新的PyPDF4与PyPDF2没有完全的向后兼容性。本文中的大大都示例都可以与PyPDF4完善配合,但也有一些不能,这就是为什么PyPDF4在本文中没有更多的特点。随意用PyPDF4替换PyPDF2的导入,看看它是若何工作的。
二、pdfrw:一个替换的PDF操纵包
Patrick Maupin建立了一个名为pdfrw的软件包,它可以完成很多与PyPDF2不异的工作。除了加密的特别情况外,本文前面提到PyPDF2的一切操纵,pdfrw都可以实现。
pdfrw的最大区分在于它与ReportLab软件包集成,是以你可以利用一些或一切预先存在的PDF构建一个新的PDF。
三、PyPDF2的安装
假如利用Anaconda而不是常规Python,可以利用pip或conda安装PyPDF2。以下是利用pip安装PyPDF2的方式:

DXCPICKPRE_0</pre>由于PyPDF2没有任何依靠,是以安装很是快。
四、若何从Python中提取PDF文档信息
我们可以利用PyPDF2从PDF中提取元数据和一些文本,特别是当在预先存在的PDF文件上履行某些范例的自动化时是很是有用的。
以下是当前可以提取的数据范例:

  • Author
  • Creator
  • Producer
  • Subject
  • Title
  • Number of page


可以在自己的电脑上随意找一个PDF文件停止尝试操纵。下面是利用该PDF编写一些代码,并领会若何拜候这些属性:

DXCPICKPRE_1</pre>首先从PyPDF2包导入PdfFileReader。PdfFileReader是一个具有多种与PDF文件交互的方式的类。在此示例中,我们挪用了.getDocumentInfo(),它将返回DocumentInformation的实例,包括了我们感爱好的大部分信息。我们还可以在reader工具上挪用.getNumPages(),让它返回文档中的页数。
information这个变量具有多个实例属性,可以利用这些属性从文档中获得所需的其他元数据。我们可以打印出该信息并将其返回以备未来利用。
虽然PyPDF2具有.extractText(),可以在其页面临象上利用提取文本(本例中未显现),但它的结果不是很好。有些PDF会返回文本,有些会返回空字符串。假如要从PDF中提取文本,倡议应当看一下PDFMiner项目。PDFMiner加倍强大,专门用于从PDF中提取文本。
五、若何扭转页面?
偶然辰PDF是横向形式而不是纵向形式,甚至是颠倒的。当有人扫描文档为PDF或电子邮件时,极能够会发生这类情况。我们可以打印出文档并阅读纸质版本,也可以利用Python的强大功用来扭转有题目标页面。
下面看一下若何利用PyPDF2扭转文章的一些页面:

DXCPICKPRE_2</pre>

上面除了pdfileReader之外,还导入了pdfileWriter,由于我们需要编写一个新的pdf。rotate_pages()获得要点窜的PDF的途径。在这个函数中,需要建立一个可以命名为pdf-writer的writer工具和一个名为pdf-reader的reader工具。
接下来,可以利用.get page()获得所需的页面。上面起头输入了第0页,也就是第一页,挪用page工具的.rotateClockwise()顺时针扭转方式并输入90。然后一样地,对于第二页,挪用.rotateCounterLockwise()逆时针扭转并输入90。
每次挪用Rotation扭转方式后,城市挪用.addPage(),这将向writer工具增加页面的扭转版本。最初一页是第3页,没有对其停止任何扭转。最初,利用.write()把一切新页写入新的PDF。
六、若何合并PDF?


在很多情况下,我们希望将两个或多个PDF合并到一个PDF中。例如,现在能够有一个标准的封面,需要转到很多范例的报告中。这时辰便可以利用python来帮助完成这类工作。
下面是实现的代码,完成PDF合并的操纵:

DXCPICKPRE_3</pre>倘使有一个要合并到一路的pdf列表时,可以间接利用merge_pdf函数完成。此函数采用了输入途径和输前路子作为参数。
首先遍历输入的paths,并为每个输入建立一个PDF阅读工具。然后遍历PDF文件中的一切页面,并利用.addpage()将这些页面写入writer工具。当完成对列表中一切PDF的一切页面的写入后,将在末端写入新的成果中。
假如不想合并每个PDF的一切页面,可以经过增加一系列要增加的页面来稍微增强这个剧本。应战一点的话,也可以利用Python的argparse模块为这个函数建立一个号令行接口。
七、若何拆分PDF?
偶然能够需要将PDF拆分为多个PDF,对于包括大量扫描内容的PDF来说特别重要。以下是若何利用PyPDF2将PDF拆分为多个文件:

DXCPICKPRE_4</pre>这个函数中再次建立了PDF的reaer工具,并对其所读取的页面停止遍历。对于PDF中的每个页面,建立一个新的PDF的writer实例并向其增加单个页面。然后,将该页面写入一个唯一命名的文件。剧本运转终了后,便可以将原始PDF的每个页面拆分为零丁的PDF。
八、若何增加水印?


水印是纸质大概电子文档上的图像或图案,一些水印只能在特别照明条件下才能看到。水印的重要性在于它可以庇护你的常识产权,例如图像或PDF。
我们可以利用Python和PyPDF2为文档增加水印,而且是具有仅包括水印图像或文本的PDF。下面是向PDF增加水印方式:

DXCPICKPRE_5</pre>上面create_watermark有三个参数:

  • input_pdf:要加水印的PDF文件途径
  • output:要保存PDF的水印版本的途径
  • watermark:包括水印图像或文本的PDF


在代码中,翻开水印PDF并从文档中抓取第一页,由于这是水印应当驻留的位置。然后利用input_pdf和通用pdf_writer工具建立PDF的writer工具,以写出带水印的PDF。
下一步是遍历input_pdf中的页面,然后挪用.mergePage()并以用上面读取的水印工具watermark_page为参数,这样会将watermark_page覆盖在当前页面的顶部,然后再将新合并的页面增加到pdf_writer工具中。遍历完成后,最初将新加水印的PDF写入磁盘。
九、若何加密PDF?


PyPDF2今朝仅支持将用户密码和一切者密码增加到预先存在的PDF。在PDF版本中,一切者密码会供给PDF的治理员权限,并答应设备文档的权限,而用户密码只答应翻开文档。
现实上,PyPDF2是不答应设备文档的任何权限的,即使它答应设备一切者密码的情况下。但不管若何,这是可以加密的方式,也将固有地加密PDF:

DXCPICKPRE_6</pre>add_encryption以输入输出PDF途径和要增加到PDF的密码为参数。由于需要加密全部输入PDF,是以需要遍历其一切页面并将其增加到writer编写器。最初一步是挪用.encrypt(),以用户密码,一切者密码以及能否应当增加128位加密为参数。默许情况下,要启用128位加密。假如将其设备为False,则将利用40位加密。
结论
PyPDF2包很是有用,可以利用PyPDF2自动履行剧本完成PDF文档的批量操纵。本文先容了若何从PDF中提取元数据,扭转页面,合并和拆分PDF,增加水印,以及增加加密的操纵。
同时,还要关注较新的PyPDF4包,由于它很快就会取代PyPDF2。也可以看看pdfrw包,它也可以履行很多与PyPDF2不异的操纵。
【完】
文章内容源自收集,侵删。
“我自己是一位处置了多年开辟的Python老法式员,告退今朝在做自己的Python私人定制课程,今年年头我花了一个月整理了一份最合适2019年进修的Python进修干货,从最根本的到各类框架都有整理,送给每一位喜好Python小伙伴,想要获得的可以转发文章并关注我的头条号。在背景私信我:01,即可免费获得。"

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
http://ekautorepair.com/buy-accutane/
回复

使用道具 举报

13

主题

39

帖子

64

积分

等待验证会员

积分
64
发表于 2019-6-11 13:35 | 显示全部楼层
转发了
http://columbiainnastoria.com/kamagra-jelly/
回复 支持 反对

使用道具 举报

13

主题

45

帖子

71

积分

等待验证会员

积分
71
发表于 2019-6-11 13:35 | 显示全部楼层
转发了
http://failedpilot.com/lasix/
回复 支持 反对

使用道具 举报

7

主题

43

帖子

57

积分

等待验证会员

积分
57
发表于 2019-6-11 13:35 | 显示全部楼层
转发了
http://redstonedart.org/buy-cialis/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 电脑,计算机,软件,程序,PC,播放器,数码,手机,通信 - 电脑杂谈 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表