PyPDF2读取中文_pdfplumber、pypdf2 常用方法总结

PyPDF2读取中文_pdfplumber、pypdf2 常用方法总结这两天学习了一些处理PDF文档的方法,网上查找资料的过程中发现很多处理PDF文件的库,多方尝试后推荐两个比较好用的。若处理对象是PDF文档本身,则推荐使用pypdf2,如对PDF文档进行分割,合并,插入等操作.若处理对象是PDF文档中的文本,表格等内容,则推荐使用pdfplumber.pypdf2PdfFileMerger。该类用来合并pdf文件,该类的构…

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

这两天学习了一些处理 PDF 文档的方法,网上查找资料的过程中发现很多处理 PDF 文件的库,多方尝试后推荐两个比较好用的。若处理对象是 PDF 文档本身,则推荐使用 pypdf2,如对 PDF 文档进行分割, 合并, 插入等操作.若处理对象是 PDF 文档中的文本,表格等内容,则推荐使用 pdfplumber.

pypdf2

PdfFileMerger。

该类用来合并 pdf 文件,该类的构造方法有一个参数:PdfFileMerger(strict=True),注意这里的参数后面会介绍:

常用方法:

addBookmark(title, pagenum, parent=None):给 pdf 添加一个书签,title 是书签的标题,pagenum 是该书签指向的页面。

append(fileobj, bookmark=None, pages=None, import_bookmarks=True):将指定的 fileobj 文件添加到文件的末尾,bookmark 是赎前,pages 可以使用 (start, stop[, step]) 或者一个 Page Range 来设定将 fileobj 中的指定范围的页面进行添加。

merge(position, fileobj, bookmark=None, pages=None, import_bookmarks=True):与 append 方法类似,不过可以使用 position 参数指定添加的位置。

write(fileobj):将数据写入到文件中。

使用的时候可以创建一个 PdfFileMerger 实例,然后使用 append 或者 merge 将想要融合的 pdf 文件依次添加进去,最后使用 write 保存即可。

def merge_pdf():

下面看一下 PdfFileMerger(strict=True) 中的这个参数:

官方对这个参数的解释:

strict (bool) – Determines whether user should be warned of all problems and also causes some correctable problems to be fatal. Defaults to True.

确定是否应该警告用户所有问题,并且还会导致一些可纠正的问题。

刚开始感觉这个参数就是用来是否警告用户一些错误的,直接使用默认即可,但是当本人尝试合并带中文的 pdf 时,出现了如下错误:

call 

在源码包中使用 utf 解码的时候出错了,尝试修改此处源码,让其使用 gbk,但是还出现了其他的错误。最后发现当把构造函数中的 strict 设置为 False 时,控制台会打印下面的错误:

in Name 

但是两个文件成功的合并了,并且大概看了下合并后的文件有时好又是坏,同样的代码运行多次,有时候能够正常处理中文,但有时候中文乱码。

除了列出的方法还有一些其他的方法,比如添加书签、添加链接等等,可以参考官方文档。

PdfFileReader。

该类主要提供了对 pdf 文件的读操作,其构造方法为:

True, warndest=

第一个参数可以传入一个文件流,或者一个文件路径。后面三个参数都是用来设置警告的处理方式,直接使用默认的即可。

得到实例之后,就可以对 pdf 进行一些操作了。主要的有以下几个操作:

  • decrypt(password):如果 pdf 文件加密的话,可以使用该方法对其解密。

  • getDocumentInfo():检索 pdf 文件的一些信息。其返回值为一个 DocumentInformation 类型,直接输出的话会得到类似下面的信息:

'/Author':

getNumPages():这个获取 pdf 文件中的页数。

getPage(pageNumber):会得到 pdf 文件中对应的 pageNumber 页数的页面对象,返回值为 PageObject 实例。在得到 PageObject 实例之后就可以将其加添、插入等操作。

  • getPageNumber(page):与上面的方法对立,可以传入 PageObject 实例,然后得到该实例是 pdf 文件中第几页的。

  • getOutlines(node=None, outlines=None):检索文档中出现的文档大纲。

  • isEncrypted:记录该 pdf 是否加密。如果文件本身加密,即使在使用解密 decrypt 方法之后,还是会返回 true。

  • numPages:pdf 总共的页数,相当于访问 getNumPages() 的只读属性。

PdfFileWriter 。

该类支持对 pdf 文件进行写操作,通常是使用 PdfFileReader 读取一些 pdf 数据,然后使用该类进行一些操作。

创建该类的实例时不需要参数。

其主要的方法有:

  • addAttachment(fname, fdata):向 pdf 添加文件。

  • addBlankPage(width=None, height=None):给 pdf 添加一个空白页到最后,如果没有指定大小就使用当前 Weiter 中 pdf 最后一页的大小。

  • addPage(page):添加 page 到 pdf 中,通常这个 page 是由上面的 Reader 获取的。

  • appendPagesFromReader(reader, after_page_append=None):将 reader 中的数据拷贝到当前的 Writer 实例中,并且如果指定 after_page_append 的话,最后还有回掉该函数并且将 writer 中的数据传入其中。

  • encrypt(user_pwd, owner_pwd=None, use_128bit=True):将 pdf 进行加密,其中官方说 userpwd 是允许用户使用一些限制的权限打开 pdf 文件,也就是使用该密码的话可能会有一些限制,但是本人并没有在文档中找到设置权限的内容。而 ownerpwd 则是允许用户无限制的使用。第三个参数是是否使用 128 位加密。

  • getNumPages():得到 pdf 页数。

  • getPage(pageNumber):得到对应页数的 Page,是一个 PageObject 对象,可以使用上面的 addPage 方法将 page 进行添加。

  • insertPage(page, index=0):将 page 添加到 pdf 中,index 指定的是被插入的位置。

  • write(stream):将该 Writer 中的内容写入到文件中。

汇总代码:

from PyPDF2 

pdfplumber

本库最重要的应用是提取页面上的文本和表格,用法如下:

import pdfplumber

pdfplumber 还可以获得页面上的所有单词、直线、方格、乃至曲线的位置信息,具体可以看看官网的说明:https://github.com/jsvine/pdfplumber

5c54f01219bb46f0d1ab9bc4d03b828d.gif

b337a6b11827aa196e79d2565e48cb51.png

333a25e3488cea70773864d6be4de64e.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年6月23日 下午12:46
下一篇 2022年6月23日 下午12:46


相关推荐

  • PhpStorm 2021 激活码【永久激活】

    (PhpStorm 2021 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlML…

    2022年3月21日
    92
  • 运维面试题(面前准备)

    运维面试题(面前准备)前段时间一直在面试,也没怎么写博客,现在找到实习工作了,也有时间去写了。在这里分享一下我面试之前做的一些准备。(以下内容是我从网上查找整理得到的…红色标注为面试提及的,但不一定是我整理的内容)TCP/IP简述TCP三次握手的过程?答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器…

    2022年6月14日
    42
  • 数据可视化工具d3_前端3d可视化

    数据可视化工具d3_前端3d可视化可视化工具D3教程第1章D3简介第2章第一个程序HelloWorld第3章正式进入D3的世界第4章选择、插入、删除元素第5章做一个简单的图表第6章比例尺的使用第7章坐标轴第8章完整的柱形图第9章让图表动起来第10章理解update()、enter()、exit()第11章交互式操作第12章布局第13章饼状图第14章力导向图第15章树状图第16章地图可视化学习D……

    2022年10月1日
    3
  • 《chkconfig命令》-linux命令五分钟系列之四

    《chkconfig命令》-linux命令五分钟系列之四

    2021年9月8日
    63
  • python逐行调试_python单步调试

    python逐行调试_python单步调试广告关闭腾讯云 11 11 云上盛惠 精选热门产品助力上云 云服务器首年 88 元起 买的越多返的越多 最高返 5000 元 本文由腾讯云 社区自动同步 原文地址 https stackoverflo clubpython debugpythonp 使用使用命令 python mpdbyour py file 进入调试界面 输入 helppdb 可以查询完整帮助信息执行命令行 debugp

    2026年3月27日
    2
  • 烽火hg6543c1光猫超级密码_电信光猫hs8145c5超级密码

    烽火hg6543c1光猫超级密码_电信光猫hs8145c5超级密码坐标杭州,宽带移机。师傅给我换了个战未来的,支持万兆的光猫…以前我是依据型号网上搜索搞到超级管理员用户就行桥接的,给我换了这个新光猫后,自己死活折腾不出来…以前大家都习惯用超级管理员进入光猫,改桥接模式利用光猫的安全漏洞花式获取超级管理员密码,什么查看网络报文、telnet啊等等手段博主要告诉大家的是,这些歪门邪道未来都是不可取的,光猫更新总归是要修复这些漏洞的。而且光猫超级管理员这玩意,电信的客服、维修师傅都不用,他们都不知道有这玩意,我们折腾有啥意义呢。大家要知道:电信是允许大家改用桥接模式的。直接打1

    2022年10月8日
    4

发表回复

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

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