什么是python自动化办公,python在办公自动化中的应用
你好,我是张。今天的文章是关于自动化办公室的。目前个人认为PyPDF2、Pdfplumer、PDFminer是Python库中处理PDF最好的三种方式。
今天的教程重点介绍PyPDF2,它为PDF提供了以下基本操作
1)将一个pdf分成多个PDF文件2)将多个PDF合并成一个PDF文件3)旋转PDF页面;4.向PDF添加水印;5.PDF加密;6.解密PDF;6.获取基本的PDF信息,如作者、标题、页码等。在PyPDF2的历史正文开始之前,我先说一下PyPDF2的发展历史。PyPDF的前身是2005年发布的PyPDF软件包,该软件包的最后一个版本发布于2010年。之后大约过了一年,一个叫Phasit的公司赞助了PyPDF。两个版本的功能基本相同,但最大的区别是PyPDF2。
PY2最近没有更新。最新版本的是2016年发布的,但是人气并没有消失。然后出现了PyPDF3、PyPDF4等不同版本。但是这些软件包并没有向后兼容PyPDF2的功能,用户当然很欢迎。
PDF 2的安装和其他Python库一样,可以通过pip或者conda工具进行安装。
Pip pyPDF2 PDF信息提取pyPDF2允许从PDF中提取一些元数据和外发的jasmine信息,从而对PDF有一个大概的了解。
可以从PDF 2中提取的数据如下
作者;作者;制片人;子对象;标题;页数;这里下载官网提供的6页PDF样本《Seige_of_Vicksburg_Sample_OCR》作为测试数据。
from py pdf 2 importpdfilereader # # pdf文档pdf _ path= D:/Data/automated office/pdf/seige _ of _ Vicksburg _ sample _ ocr . pdf Rb )ASF:pdf=pdf filereader(f)info mation=pdf . getdocumentinfo f . getnumpa信息3360作者:{ infomation.author },创建者:{ infomation.creator },制作者:{ infomation.pro omation }主题:{ infomation.subject },title},号
d:/Data/automated transaction/pdf/Seige _ of _ Vicksburg _ sample _ ocr.pdf信息3360作者3360 DSI,创建者:luradocume在上面的例子中,制作者:luradocumentpdfv 2.38,Subject: None,title3360页数:6是一个PDF文件阅读器,用于与PDF文件等进行交互,getDocumentInfo))方法返回包含所需信息的DocumentInformation实例。还可以通过对reader对象调用getNumPages方法来返回文档中的页数。
个人认为里面的数据也有一点页数的数值,批量统计的情况更适合这种方法。
PDF的页面旋转PyPDF2的每一页都以Page对象的形式存在,可以使用reader对象的get_page(page_index)方法返回页面的一个实例。其中page_index表示索引
有两种方法可以旋转页面。
将时钟顺时针旋转90度;旋转逆时针(90),逆时针旋转90度;以下代码指示目标PDF的第一页顺时针旋转90度,第二页逆时针旋转90度,而不改变其他页面的位置角度。
Pypdf2导入到pdf文件存储中,pdffilewriterpdf _ writer=pdf文件存储(pdf _ reader=pdf文件存储)PDF _ path #
0)pdf_writer.addPage(page_1)#向左旋转页面90度page_2=pdf_reader.getPage(1)。rotate逆时针(90)pdf_writer.addPage(page_2)#之后在range (2,pdf _ reader . getnumpages()):pdf _ writer . add page(pdf _ reader . get page(I))with open(pdf _ path, WB) as FH: pdf _ writer.write (FH)如下
在代码中,同时使用了两个类,PDF FileReader和PDF FileWriter。页面旋转不是在原始PDF的基础上操作,而是在内存中创建新的PDF流对象。操作后的每一页都通过addPage()方法添加到这个对象中,然后这个对象在内存中被写入文件中。
写到这里,说实话,页面旋转的功能基本没用。这里补充一下只是作为一些话,哈哈哈。
从py pdf2import pdf filereader,PDF writer # # PDF document PDF _ path= D:/Data/office automation/PDF/seige _ of _ Vicksburg _ sample _ ocr . PDF save _ path= D:/Data/office automation/PDF/ # Split Pages of PDF PDF df _ reader=PDF file reader(PDF _ path)for I in range(0,PDF _ reader . getnumpages()):PDF _ writer=PDF pdf 格式(str(i)), wb )为FH:pdf _ writer . write(FH)print({ }保存成功!\n。format(str(i))代码将原PDF文件中的每一页拆分成每一个PDF文件,其中文件名以页面索引命名;
您也可以通过拆分从pdf文件中提取固定页码范围。比如我只想从pdf里摘录2-5页,其他部分不要。那么代码将以如下形式编写
对于范围(1,5)中的I,pdf _ writer=PdfFileWriter()pdf _ reader=PdfFileReader(PDF _ path):# PDF _ writer=PdfFileWriter()PDF _ writer . add page(PDF _ reader . get page(I))#每一页写入一个路径,打开(save_path 2_5.pdf ,Wb )作为fh: pdf_writer.write(fh)多个PDF文件合并成一个PDF。虽然拆分和合并方向相反,但是使用的类和原理是一样的。
PdfFileReader读取每个pdf并递归获取每个页面的页面对象。PdfFileWrite创建一个新的stream对象,将之前内存中读取的页面对象依次写入这个stream对象,最后写入磁盘文件。
从PyPDF2导入PdfFileReader,PdfFileWriterp1 _ PDF= D:/Data/automation/PDF/seige _ of _ Vicksburg _ sample _ ocr . PDF p2 _ PDF= D:/Data/automation/Sei _ of _ Vicksburg _ sample _ ocr . PDF merge _ PDF= D:/Data/office automation/PDF/merge . PDF P1 _ reader=PDF file reader(P1 _ PDF)p2 _ reader=PDF file reader(p2
在今天列出的所有函数中,给PDF添加水印是最有用的函数。批量添加水印主要使用Page对象中的margePage()方法,通过合并两个页面达到添加水印的效果。
Pypdf2只能操作pdf对象,所以在添加水印之前,需要把要添加的水印保存在一个pdf文件中。
从PyPDF2导入PdfFileReader,Pdffilewriterwatermark= d:/data/automated office/PDF/Watermark . PDF input _ PDF= d:/data/automated office/PDF/merge . PDF output= d:/data/automated office/PDF/merge _ Watermark . PDF Watermark _ obj=PDF file reader(Watermark)Watermark _ page=Watermark _ obj . get page(0)PDF _ reader=PDF file reader(input _ PDF)PDF _ writer=PDF 和加水印的原图按顺序【外链图片传递失败,源站可能有防盗链机制,建议保存图片直接上传(IMG-XP 0 elxsk-1615825692823)(https://images . zeroing python . top/img/image-20210314005417135 . png)】
上面的效果不好是因为做水印的时候没有考虑到页面布局问题,所以合并的时候少了一部分;
用上面的代码添加水印的好处是可以为pdf指定页面字段水印,比如只为奇数页添加偶数页,不仅灵活而且高效,当然也可以对多个文件进行批量操作。
PDF加密和解密pdf加密
对于一个pdf文件,如果我们不希望别人能够读取它的内容,我们可以通过pypdf2为它设置一个密码。如果只是单个文件,不如找个工具手工操作,效率会更高。但是,对于多个文件,强烈建议使用下面的方法。
Watermark= D:/Data/office automation/PDF/seige _ of _ Vicksburg _ sample _ ocr . PDF input _ PDF= D:/Data/office automation/PDF/merge _ Watermark 1 . PDF Watermark _ obj=PDF filereader(Watermark)Watermark _ page=Watermark _ obj . get page(0)PDF _ reader=PDF filereader(input _ PDF)PDF _ writer=pdffile writer
使用加密函数时,需要注意三个参数。
User_pwd,str,用户密码,用于限制文件的打开和读取;
Owner_pwd,str,比用户密码高一级。如果提供了该文件,则可以不受任何限制地打开它。如果未指定,默认的owner_pwd与user_pwd相同。
Use_128bit布尔值,用于表示是否使用128位作为密码。如果为False,则表示使用40位作为密码。默认值为True;
pdf解密
使用Decrypt()函数读取文件时会用到decrypt。
rom PyPDF2导入PDF filerewriter,PDF filereader input _ PDF= report lab-encrypted . PDF output _ PDF= report lab . PDF password= two fish PDF _ writer=PDF filereader()PDF _ reader=PDF _ reader . decrypt(password)对于范围内的页面(PDF _ reader . getnumpages()):PDF _ writer . add page(PDF _ reader . get page(page))在打开(open
简要介绍了PyPDF2库的基本用法,并用其代码实例实现了一些基本操作。但是这里提醒一下,以上所有操作都只适用于批量操作场景。如果对象是一个单独的文件,建议使用常规的做法,如果太显眼的话只会浪费时间。
我没有参与过pdf中图形内容的提取和编写,因为pypdf2不擅长这方面,而Pdfplumber和PDFminer在外向茉莉提取方面要好得多,工欲善其事,必先利其器;我会在下面的教程中介绍这方面的内容,期待大家的关注!
好了,这篇文章就到这里。最后,感谢您的阅读。下次见~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。