安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

python自动化pdf文档操作

6月2日 飞仙轩投稿
  使用第三方库PyPDF2
  读取、写入、分割、合并PDF文
  安装:pdfplumber
  读取PDF文件中内容和提取PDF中的表格
  安装:!pip3installPyPDF2复制代码CollectingPyPDF2DownloadingPyPDF21。26。0。tar。gz(77kB)〔K77kB125kBs〔?25hBuildingwheelsforcollectedpackages:PyPDF2BuildingwheelforPyPDF2(setup。py)。。。〔?25ldone〔?25hCreatedwheelforPyPDF2:filenamePyPDF21。26。0py3noneany。whlsize61085sha256dba5825a58d21d37cf9e417039694f1b9e716760ee7b9f0fdcca8fc65b8ef3feStoredindirectory:UserslichizouLibraryCachespipwheelsd9dcec72da68331f30074b9950c1737c23cb8a67484e61498bc9713dSuccessfullybuiltPyPDF2Installingcollectedpackages:PyPDF2SuccessfullyinstalledPyPDF21。26。0复制代码!pip3installpdfplumber复制代码CollectingpdfplumberDownloadingpdfplumber0。5。28。tar。gz(45kB)〔K45kB152kBs〔?25hCollectingpdfminer。six20200517Downloadingpdfminer。six20200517py3noneany。whl(5。6MB)〔K5。6MB145kBs〔?25hCollectingPillow7。0。0DownloadingPillow8。2。0cp39cp39macosx1010x8664。whl(2。8MB)〔K2。8MB70kBs〔?25hCollectingWandDownloadingWand0。6。6py2。py3noneany。whl(138kB)〔K138kB16kBs〔?25hCollectingpycryptodomeDownloadingpycryptodome3。10。1cp35abi3macosx109x8664。whl(1。5MB)〔K1。5MB43kBs〔?25hCollectingsortedcontainersDownloadingsortedcontainers2。4。0py2。py3noneany。whl(29kB)CollectingchardetDownloadingchardet4。0。0py2。py3noneany。whl(178kB)〔K178kB96kBs〔?25hBuildingwheelsforcollectedpackages:pdfplumberBuildingwheelforpdfplumber(setup。py)。。。〔?25ldone〔?25hCreatedwheelforpdfplumber:filenamepdfplumber0。5。28py3noneany。whlsize32219sha25623afcf4aa92bdd0fb4e2a71b0974c1edd5ca9e59b37ef5e41b15fae3bffc5c30Storedindirectory:UserslichizouLibraryCachespipwheelse9cb1bc5dbba18cac53515263c5f26443e4617fa432c32cbaa7d8e48SuccessfullybuiltpdfplumberInstallingcollectedpackages:sortedcontainers,pycryptodome,chardet,Wand,Pillow,pdfminer。six,pdfplumberSuccessfullyinstalledPillow8。2。0Wand0。6。6chardet4。0。0pdfminer。six20200517pdfplumber0。5。28pycryptodome3。10。1sortedcontainers2。4。0复制代码foriinrange(0,10,2):print(i)复制代码02468复制代码批量拆分defsplitpdf(filename,filepath,savedirpath,step5):拆分pdf为多个小pdf文件,paramfilename:要拆分的文件名paramfilepath:要拆分的文件路径paramsavedirpath:保存小的的pdf的文件路径paramstep:每个step页生成一个文件,默认情况,04页问一个文件,59页为第二个文件return:ifnotos。path。exists(savedirpath):os。makedirs(savedirpath)pdfreaderPdfFileReader(filepath)pagespdfreader。getNumPages()forpageinrange(0,pages,step):page取值:list〔0,5,10。。。pages)pdfwriterPdfFileWriter()forindexinrange(page,pagestep):index取值,区间:〔0,5),〔5,10)ifindexpages:防止全部页数不能整除pdfwriter。addPage(pdfreader。getPage(index))逐页添加savepathos。path。join(savedirpath,filenamestr(int(pagestep)1)。pdf)withopen(savepath,wb)asout:pdfwriter。write(out)复制代码fromPyPDF2importPdfFileReaderfromPyPDF2importPdfFileWriter复制代码path易方达中小板指数证券投资基金(LOF)2020年中期报告当前路径下splitpdf(path,path。pdf,testpdf)复制代码批量合并易方达中小板指数证券投资基金(LOF)2020年中期报告1。pdf〔:4〕。replace(易方达中小板指数证券投资基金(LOF)2020年中期报告,)复制代码1复制代码123456789〔:4〕复制代码12345复制代码os。listdir(。testpdf)复制代码〔易方达中小板指数证券投资基金(LOF)2020年中期报告3。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告2。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告1。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告5。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告4。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告6。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告7。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告9。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告8。pdf,易方达中小板指数证券投资基金(LOF)2020年中期报告10。pdf〕复制代码defconcatpdf(filename,readdirpath,savefilepath):合并多个pdf文件paramfilename:文件名paramreaddirpath:要合并的pdf目录paramsavefilepath:合并后的pdf文件路径returnpdfwriterPdfFileWriter()listfilenameos。listdir(readdirpath)listfilename。sort(keylambdax:int(x〔:4〕。replace(filename,)))去掉。pdf,替换文件名,获得文件编号forfninlistfilename:filepathos。path。join(readdirpath,fn)pdfreaderPdfFileReader(filepath)pagespdfreader。getNumPages()forpageinrange(pages):逐页添加pdfwriter。addPage(pdfreader。getPage(page))withopen(savefilepath,wb)asout:pdfwriter。write(out)复制代码concatpdf(易方达中小板指数证券投资基金(LOF)2020年中期报告,。testpdf,concat。pdf)复制代码提取文字内容importpdfplumber复制代码defextractpdftext(pdfpath,pageorder1):提取pdf指定页文字parampdfpath:文件路径parampageorder:页数,〔0,〕;1表示读取全部returnwithpdfplumber。open(pdfpath)aspdf:ifpageorder1:forpageinpdf。pages:print(page。extracttext())returnpagepdf。pages〔pageorder〕print(page。extracttext())复制代码extractpdftext(concat。pdf,0)复制代码易方达中小板指数证券投资基金(LOF)2020年中期报告易方达中小板指数证券投资基金(LOF)2020年中期报告2020年6月30日基金管理人:易方达基金管理有限公司基金托管人:中国建设银行股份有限公司送出日期:二二年八月二十八日复制代码将pdf内容存入txtdefsavepdftextastxt(pdfpath,txtpath,pageorder1):strwithpdfplumber。open(pdfpath)aspdf:ifpageorder1:forpageinpdf。pages:strpage。extracttext()print(page。extracttext())returnpagepdf。pages〔pageorder〕print(page。extracttext())strpage。extracttext()withopen(txtpath,w)asfile:file。write(str)复制代码savepdftextastxt(concat。pdf,concat1。txt,0)复制代码格式丢失defgetpdftext(pdfpath,pageorder1):strwithpdfplumber。open(pdfpath)aspdf:ifpageorder1:forpageinpdf。pages:strpage。extracttext()print(page。extracttext())returnpagepdf。pages〔pageorder〕print(page。extracttext())strpage。extracttext()returnstr复制代码savepath带有文件后缀,因此可以获得文件类型:txt或worddefsavepdftext(str,savepath):pass复制代码提取表格内容importpdfplumber复制代码defextractpdftable(pdfpath,pageorder0):withpdfplumber。open(pdfpath)aspdf:pagepdf。pages〔pageorder〕tableinfopage。extracttables()该页只有一个表格的情况下,设置表格第一行为表头,其余为数据forindexinrange(len(tableinfo)):dftablepd。DataFrame(tableinfo〔index〕〔1:〕,columnstableinfo〔index〕〔0〕)print(index)print(dftable)todo:是否可以合并成1个文件?filenamepdftablestr(pageorder1)str(index1)。csvprint(filename)dftable。tocsv(filename,indexFalse,encodinggbk)gbk能用excel打开,utf8用vscode打开!pip3installPandasRequirementalreadysatisfied:Pandasinusrlocallibpython3。9sitepackages(1。2。4)Requirementalreadysatisfied:pytz2017。3inusrlocallibpython3。9sitepackages(fromPandas)(2021。1)Requirementalreadysatisfied:pythondateutil2。7。3inUserslichizouLibraryPython3。9libpythonsitepackages(fromPandas)(2。8。1)Requirementalreadysatisfied:numpy1。16。5inusrlocallibpython3。9sitepackages(fromPandas)(1。20。3)Requirementalreadysatisfied:six1。5inUserslichizouLibraryPython3。9libpythonsitepackages(frompythondateutil2。7。3Pandas)(1。16。0)importpandasaspdextractpdftable(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf,6)pdftable7。csvextractpdftable(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf,7)第8页,单表格pdftable8。csvextractpdftable(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf,15)第16页,多表格,第一个表格残缺,最终只输出完整的第二个表格pdftable161。csvpdftable162。csvextractpdftable(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf,14)第15页,表格有部分在第16页,检测是否完全输出:没有,被截断了。bug了pdftable151。csvpdftable152。csv完整的2个表格,第20页extractpdftable(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf,19)pdftable201。csvpdftable202。csv提取图片内容使用模块fitz,最新版1。18。13和非最新版在部分函数名称上有差异需要先安装PyMuPDF:pip3installPyMuPDF
  官方文档:pymupdf。readthedocs。ioenlatest
  提取图片的整体逻辑如下:使用fitz打开文档,获取文档详细数据遍历每一个元素,通过正则找到图片的索引位置使用Pixmap将索引对应的元素生成图片通过size函数过滤较小的图片!pip3installPyMuPDFCollectingPyMuPDFDownloadingPyMuPDF1。18。14cp39cp39macosx109x8664。whl(5。6MB)〔K5。6MB5。1MBs〔?25hInstallingcollectedpackages:PyMuPDFSuccessfullyinstalledPyMuPDF1。18。14importfitzimportrepdffitz。open(易方达中小板指数证券投资基金(LOF)2020年中期报告。pdf)xreflenpdf。xreflength()xreflen文档对象个数17912len(pdf)实际pdf页数49导出图片地址picdirpdfexportimgifnotos。path。exists(picdir):os。makedirs(picdir)使用正则表达式来查找图片checkXObjectrType(?XObject)checkImagerSubtype(?Image)遍历pdf对象,找到图像imgcount0forindexinrange(1,xreflen):textpdf。xrefobject(index)isxobjectre。search(checkXObject,text)isimagere。search(checkImage,text)ifisxobjectorisimage:imgcount1根据索引生成图像pixfitz。Pixmap(pdf,index)picfilepathos。path。join(picdir,imgstr(imgcount)。png)pix。size可以反映像素多少,简单的色素块该值较低,可以通过设置一个阈值过滤。以阈值10000为例过滤ifpix。size10000:continue将图片保存为png格式ifpix。n5:pixfitz。Pixmap(fitz。csRGB,pix)pix。writePNG(picfilepath)print(导出图片:str(imgcount))整个pdf只有1张图导出图片:1转存为图片
  将每一页转换为一张张图片
  安装pdf2image,github:github。comBelvalpdf2
  安装:pip3installpdf2image对于mac用户,需要安装popplerforMac:brewinstallpoppler!pip3installpdf2imageCollectingpdf2imageDownloadingpdf2image1。15。1py3noneany。whl(10kB)Requirementalreadysatisfied:pillowinusrlocallibpython3。9sitepackages(frompdf2image)(8。2。0)Installingcollectedpackages:pdf2imageSuccessfullyinstalledpdf2image1。15。1复制代码3种方法,这里使用官方图推荐的更好的一种frompdf2imageimportconvertfrompathimporttempfileimportsend2trashimportshutil肉眼可见的慢defpdfsaveasimg(pdfpath,imgdir):方便测试,send2trash。send2trash(imgdir)ifnotos。path。exists(imgdir):os。makedirs(imgdir)withtempfile。TemporaryDirectory()aspath:ppmconvertfrompath(pdfpath,outputfolderimgdir)将ppm文件保存为png图片forindex,pminenumerate(ppm,1):imgnamepdfnamestr(index)。zfill(2)。pngpm。save(os。path。join(os。path。dirname(pm。filename),imgname))删除ppm文件forroot,dir,fileinos。walk(imgdir):forfinfile:iff〔4:〕。ppm:print(f)send2trash。send2trash(os。path。join(root,f))pdfpath易方达中小板指数证券投资基金(LOF)2020年中期报告。pdfimgdirpdfimg发现生成了。ppm格式的文件,不是图片格式,且命名带有规律,但不是原来的名字ppmpdfsaveasimg(pdfpath,imgdir)help(ppm〔0〕)ppm〔0〕。save(pdfimg。png)type(ppm〔0〕)PIL。PpmImagePlugin。PpmImageFileppm〔0〕。filenamepdfimg76b22d8cb50f4bfeb5eff8b446d7d0ae01。ppm复制代码pdfpath。split(。)〔0〕复制代码易方达中小板指数证券投资基金(LOF)2020年中期报告pdfimg76b22d8cb50f4bfeb5eff8b446d7d0ae01。ppm〔:4〕pdfimg76b22d8cb50f4bfeb5eff8b446d7d0ae01添加水印
  使用库:github。com2Douwaterm
  步骤:
  1。获得一个带水印pdf文件
  1。1在图片添加水印,图片插入到word,word保存为pdf
  1。2python处理:参考
  github。com2Douwaterm
  mp。weixin。qq。comsoJA6lbsd
  2。将水印pdf文件合并到源目标pdf文件的每一页获取水印图片步骤1:省车给你一张透明的水印步骤2:将水印添加到一张空白图上生成水印背景步骤3:将水印背景粘贴到原图对应的位置上去两种水印类型固定位置水印:容易被去除全屏水印:不容易被去除,但可能会影响阅读土办法
  法1,直接在word,插入文本框,旋转,设置无边框,注意设置背景透明,然后复制多个。导出为pdf。
  法2,word本身自己的增加水印,设计水印自定义文字或图片。缺点是只能是单个水印。给pdf添加水印defaddpdfwatermask(maskpath,pdfpath,savepath):watermaskPdfFileReader(maskpath)watermaskpagewatermask。getPage(0)pdfreaderPdfFileReader(pdfpath)pdfwriterPdfFileWriter()pdfpagenumpdfreader。getNumPages()对pdf的每一页(除了首页),逐页与水印pdf合并,并添加到新的pdfforpageindexinrange(pdfpagenum):currentpagepdfreader。getPage(pageindex)ifpageindex0:第一页不加水印pdfwriter。addPage(currentpage)continuecurrentpage。mergePage(watermaskpage)currentpage。compressContentStreams()压缩内容pdfwriter。addPage(currentpage)保存新的pdf文件withopen(savepath,wb)asout:pdfwriter。write(out)addpdfwatermask(chizou。pdf,concat。pdf,concatwatermarker。pdf)
  缺点是水印在内容pdf上方,如果设置过大,颜色不太透明,会遮挡内容。
  文档加密与解密
  解密:并不是破解,而是在已知密码的情况下解密fromPyPDF2importPdfFileReaderfromPyPDF2importPdfFileWriter加密pdfreaderPdfFileReader(concat。pdf)pdfwriterPdfFileWriter()pagenumpdfreader。getNumPages()forpageindexinrange(pagenum):pdfwriter。addPage(pdfreader。getPage(pageindex))pdfwriter。encrypt(masaikemasaike)先逐页添加页,最后加密withopen(concatencrypt。pdf,wb)asout:必须是wb,二进制打开pdfwriter。write(out)解密:对concatencrypt。pdf解密,另存pdfreaderPdfFileReader(concatencrypt。pdf)pdfreader。decrypt(masaikemasaike)一次性解密pdfwriterPdfFileWriter()pagenumpdfreader。getNumPages()forpageindexinrange(pagenum):pdfwriter。addPage(pdfreader。getPage(pageindex))withopen(concatdecrypt。pdf,wb)asout:pdfwriter。write(out)
  作者:秦与商
  链接:https:juejin。cnpost7069582991982329893
投诉 评论 转载

很多人不知道,其实迅雷也干过挖矿的事虚拟货币让无数人一夜暴富,也令无数人一无所有。2021年的矿潮令人瞩目,虚拟货币又一次站在了风口浪尖,万恶之源比特币,让显卡不断缺货涨价的ETH,大容量硬盘终结者奇亚币依……python自动化pdf文档操作使用第三方库PyPDF2读取、写入、分割、合并PDF文安装:pdfplumber读取PDF文件中内容和提取PDF中的表格安装:!pip3installP……手里存了13w,是先买车还是创业,求求过来人指点迷津!谢谢?买车虽然可以让自己舒坦一些,有面子一些,方便一些,其他的也就没有什么了,除非必须要买,那就没办法了,汽车纯属于消费,而且汽车贬值也很快,还有其他的附加值消费,一般没必要可以不买……想请教大神们一下,家里每天打扫,还是感觉灰尘好多,这是为什么其实每个家庭都一样,我每天都打扫,每天都有灰尘,其实不爱打扫的人看不见灰尘,其实生活在空气中哪能没灰尘。我跟你同感,家里一天不打扫就灰尘满天飞。我想了很多年,想明白的几点……华为和比亚迪在郑州投资的到底是什么?郑州,中原。随着郑州作为国家物流中心地位的确立,地理优势明显。作为国家新一线城市,地方政府又制订了好多吸引投资的优惠政策;华为和比亚迪等著名投资郑州岂不是顺理成章的事情。……联想决定自研芯片?杨元庆公开表态,难道不是冲着补贴来的?联想作为曾经家喻户晓的中国品牌,在全球市场都有着绝对的影响力,那句如果失去联想、人类将会怎么样的标语,让所有人为之骄傲。然而,万万没想到的是,在海外市场得到一定的认可度后……500个视频20个200万像素摄像头出现部分延迟,什么原因?你好,我是弱电工程师很高兴回答你的问题。我个人简单的分析一下,希望能帮助你,摄像机出现延迟有几个原因,需要排查就知道了:用手机客户端观看和电脑客户端观看,电脑客户端观看的……美将88家中概股增至预摘牌名单,外交部回应来源:环球时报【环球时报报道记者倪浩】美国对中国公司展开新一轮打击。印度亚洲通讯社5日称。当地时间4日,美国证券交易委员会(SEC)网站将88家中概股列入可能被逐出美国证……今年618想买一台苹果手机,有哪些机型降价幅度大?大胆预测下,我觉得苹果的降价幅度不会很小,毕竟去年也这么玩了。而且iPhone13的芯片储备量也是非常巨大的,这次不赶紧让iPhone12走一波量,那就太可惜了!第二方面国产手……国内手机销量暴跌不愿意换手机的年轻人00后晓洁是河北科技大学的一名学生,她现在用的苹果手机是四年前父母送给她的开学礼物,她清晰地记得当时花了七千多元。四年来她从没想过换手机,即便是中途手……加速解决物联网生态及设备割裂难题,边无际Edgenesis基作者韦世玮编辑石亚琼物联网(IoT)这股浪潮在国内市场已经掀起数年,从开发平台到操作系统,从上游零部件到下游终端设备,各个细分赛道都少不了新玩家摩拳擦掌的身影。日前……如何主动把被套的股票变成主动解套?我国庆节前预测十月十一月会有一次每年一度的吃饭行情,所以七成仓过节,但是没想到节后大盘连续暴跌300点,导致重仓被套!到现在仍有三支被套!关于解套,基本上有两个方法,第一……
用了vivo新系统,感觉IOS都不好使了,国产系统何时能崛起9点1氪腾讯华为等承诺不监听个人隐私腾讯回应微信内容向国外搜5月31日魅族将携手鸿蒙鸿蒙系统,不负期待纯电动车,让广汽丰田力不从心苹果为什么不买华为的基带?创新专利人体工学,西伯利亚维京战舰电竞椅荣耀上市铝合金材质多功能设计,ORICO立式收纳支架体验能分享些老照片看看吗?iOS15正式版发布!带来一大波新功能华为新机官宣100W快充5000万主摄,首发鸿蒙系统2。1版谷歌seo优化怎么做?微信发布封号新规定,这5类行为将永久封号,用户需留意董卿如果你没空看书,请一定要逼自己做这件事真正能伤害你的是什么仲裁申请书电脑主板接口知识大全十种表现看你心理老化了吗最近频上热搜的肖战要凉凉?唯愿你历尽千帆仍是最初的少年奇迹生还2017湖南省制造业50强企业排行榜运动健康减肥要注意什么?产后恢复:个人卫生很关键从人人是记者到处处皆网红微博因转型而重生幼儿园老师对孩子的寄语

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利