分享

使用Python操作PDF:常用PDF库总结

 黄爸爸好 2022-11-15 发布于上海
使用Python操作PDF:常用PDF库总结

使用Python操作PDF:常用PDF库总结

我不是玉

关注他

88 人赞同了该文章

  • 2022.06.07修订:新增第三方库 borb。初稿写于2021.01.02,彼时 borb 才发布1.0版没几个月;两年不到,Github上已近三千赞。

PDF(Portable Document Format)是一种便携文档格式,便于跨操作系统传播文档。PDF文档遵循标准格式,因此存在很多可以操作PDF文档的工具,Python自然也不例外。本文从功能开源协议社区活跃度三方面对比7个常用的Python第三方库,以便根据具体需求选择合适的库。

常见PDF库

由于PyPDF2似乎更知名,故本文以其作为条目列出。

PyPDF、PyPDF2及PyPDF4的渊源[1]

自身不能创建新内容,但是集成了ReportLab,可以兼容ReportLab生成新页面。

商业版的开源版本,专业创建PDF内容如文本、图表等。

基于C++的QPDF,对标PyPDF2pdfrw;偏向PDF底层。

基于pdfminer.six,除了读取文本、形状(矩形、直线/曲线)外,还能解析表格

几个提取PDF表格的Python库的对比[2]

pdfminer的社区维护版(pdfminer自2020年起不再积极维护)。

基于mupdf,功能全面,并以处理速度著称[3]

纯Python库,支持读、写、操作PDF文档,兼顾底层和高级应用。

对比

本文将Python操作PDF的能力从大粒度上分成提取内容操作页面创建内容三方面。前两者分别是针对已经存在的PDF文档的读和写操作,最后一项从内容上创建新文档。

  • 提取内容如文本、图片、元信息

  • 操作页面特指操作已经存在的页面,例如分割、合并、裁剪、旋转等

  • 创建内容指创建或修改页面内容,例如文本、图片、形状

考虑到时效性,以下对比列出了撰写本文时(2021.01)相应的最新版本。修订:borb于 2022.06 新加入对比,时间点以此为准。

库名称当前版本版本,,开源协议最近更新年前年前非常活跃非常活跃活跃个月前非常活跃非常活跃功能:提取内容功能:操作页面功能:创建内容Python库名称当前版本Python版本开源协议最近更新功能:提取内容功能:操作页面功能:创建内容1PyPDF21.26.02.6−3.6modifiedBSD3年前√√×2pdfrw0.42.6−3.6MIT3年前√√×3ReportLab3.5.582.7,3.6+BSD非常活跃××√4pikepdf2.2.42.7,3.6+MPL2.0非常活跃√√×5pdfplumber0.5.253.6−3.8MIT活跃√××6pdfminer.six202010183.6+MIT2个月前√××7PyMuPDF1.18.53.6+GPLV3非常活跃√√√8borb2.0.273.6+AGPL非常活跃√√√

总结

  • PyPDF2系列、pdfrwpikepdf专注对已经存在的PDF的操作(分割、合并、旋转等),前两者基本处于停止维护的状态。

  • pdfplumber及其依赖pdfminer.six专注PDF内容提取,例如文本(位置、字体及颜色等)和形状(矩形、直线、曲线),前者还有解析表格的功能。

  • ReportLab专注PDF页面内容(文本、图、表等)的创建。

  • PyMuPDFborb同时支持读、写及PDF页面操作,功能最为全面。其中,PyMuPDF尤其以速度快著称,而borb是新开发并深得好评的库,潜力无穷。但是,二者同为GPL家族的开源协议,对商用不太友好。

    对商用不太友好指的是支持免费使用,但是要求引用其的程序也必须遵守相应协议即开源。如果需要闭源使用的话,需要向作者申请付费的商用授权。

最后以下图结束本文。

参考

  1. ^How to Work With a PDF in Python https:///pdf-python/

  2. ^Comparison with other PDF Table Extraction libraries and tools https://github.com/atlanhq/camelot/wiki/Comparison-with-other-PDF-Table-Extraction-libraries-and-tools

  3. ^Appendix 1: Performance https://pymupdf./en/latest/app1.html

编辑于 2022-06-08 00:57

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多