使⽤python解析pdf⽂件
使⽤python解析pdf⽂件
本⽂主要介绍怎么使⽤python解析pdf⽂件
pdf⽂件格式
html文件转换器今天,pdf已经是最常⽤的数据格式。在1990, Adobe公司定义pdf⽂档的结构。PDF 格式背后的理念是,传输的数据/⽂档对于参与通信过程的双⽅(创建者、作者或发送者以及接收者)来说看起来完全相同。PDF 是 格式的继承者,并被标准化为 。
处理PDF⽂件
对于 Linux,有强⼤的命令⾏⼯具可⽤,例如 和 。但作为开发⼈员,基于 Python库构建⾃⼰的 PDF 软件, 并可以免费使⽤,是⼀件⾮常令⼈兴奋的事情。
本⽂是⼀个⼩系列的开始,将介绍⼀些有⽤的 Python 库。 在第⼀部分中,我们将重点关注已有 PDF 的处理。 将介绍如何读取PDF和提取内容(⽂本和图像)、旋转单页以及将⽂档拆分为单独的页⾯。 第⼆部分将介绍基于叠加层添加⽔印。 第三部分将专注于编写/创建PDF,还将包括删除和重新组合单个页⾯到新⽂档中。
⼯具和库
Python 相关的 PDF ⼯具、模块和库有点混乱,需要花点时间弄清楚什么是什么,以及哪些项⽬是持续维护的。根据我们的调研,以下是最新的库:
: ⼀个⽤于提取⽂档信息和内容、逐页拆分⽂档、合并⽂档、裁剪页⾯和添加⽔印的 Python 库。 PyPDF2 ⽀持加密和加密⽂档。
2016年后就没在更新和维护。
:这个包完全⽤ Python 编写,适⽤于 Python 2.4。对于 Python 3来说,请使⽤这两个包都可以解析、分析和转换 PDF ⽂档。这包括对 PDF 1.7 以及 CJK 语⾔(中⽂、⽇语和韩语)和各种字体类型(Type1、TrueType、Type3 和 CID)的⽀持。该库⽬前还在维护和更新。
:它将⾃⼰描述为“⼀个快速且友好的 PDF 抓取库”,通过封装 PDFMiner、 和 ⽽实现的。它的设计⽬标是“⽤尽可能少的代码从多个PDF 中可靠地提取数据”。2016年后就没在更新和维护。
:它是对 的简单Python 包装,可以从 PDF 中读取表格并将它们转换为 数据格式,还能将 PDF ⽂件转换为 CSV/TSV/JSON ⽂件。
该库⽬前还在维护和更新。
for Python:它是对 库的扩展。它可以解析、分析和转换 PDF ⽂档。2019年后就没在更新和维护。
: Python下的PDF⽂档⽣成库。它从 PHP 库移植⽽来,FPDF是⼀个著名的 PDFlib 替代库,它有许多⽰例、脚本。2017年后就没在更新和维护。
:提供从 PDF ⽂档中提取表格的商业服务.提供 API 以便 PDFTables 可以⽤作 SAAS。
-Python 图形包:PyX 是⽤于创建 PostScript、PDF 和 SVG ⽂件的 Python 包。它结合了 PostScript 绘图模型的抽象和
TeX/LaTeX 接⼝。该库⽬前还在维护和更新。
: ⼀个强⼤的库,主要专注于 PDF ⽂档的精确创建。免费提供开源版本以及名为 ReportLab PLUS 的商业增强版。该库⽬前还在维护和更新。
(⼜称为 “fitz”)MuPDF 的 Python 绑定,这是⼀个轻量级的 PDF 和 XPS 查看器。该库可以访问 PDF、XPS、OpenXPS、epub、漫画和⼩说格式的⽂件,并以其顶级性能和⾼渲染质量⽽闻名。该库⽬前还在维护和更新。
:⼀个纯基于 Python 的 PDF 解析器,⽤于读写 PDF。⼀个纯基于 Python 的 PDF 解析器,⽤于读写
PDF。它真实地再现⽮量格式⽽⽆需光栅化。与 ReportLab 结合使⽤,它有助于在使⽤ ReportLab 创建的新 PDF 中重⽤现有 PDF 的部分内容。
Library Used for
PyPDF2读
PyMuPDF读
pdflib读
PDFTables读
tabula-py读
Library Used for
PDFMiner.six读
PDFQuery读
pdfrw读,写/创建
Reportlab写/创建
PyX写/创建
PyFPDF写/创建
下⾯将重点介绍 PyPDF2 和 PyMuPDF,并介绍如何以最简单的⽅式提取⽂本和图像。结合官⽅⽂档和其他资源提供的⼤量⽰例有助于理解 PyPDF2 的⽤法。相⽐之下,官⽅ PyMuPDF ⽂档要清晰得多,使⽤该库的速度要快得多。
使⽤PyPDF2抽取⽂字
安装PyPDF2
pip install PyPDF2
例⼦1:抽取⽂档信息和内容
#!/usr/bin/python
from PyPDF2 import PdfFileReader
pdf_document ="example.pdf"
with open(pdf_document,"rb")as filehandle:
pdf = PdfFileReader(filehandle)
# 使⽤getDocumentInfo获取⽂档信息
info = DocumentInfo()
# 使⽤getNumPages获取⽂档页数,页⾯从0开始计数
pages = NumPages()
print(info)
print("number of pages: %i"% pages)
page1 = Page(0)
print(page1)
actText())
输出结果如下图所⽰
如上图所⽰,提取的⽂本被连续打印。 没有段落或句⼦分隔。正如 PyPDF2 ⽂档中所述,所有⽂本数据都是按照它们在页⾯内容流中提供的顺序返回的,依赖它可能会导致⼀些奇怪结果。这主要取决于 PDF ⽂档的内部结构,以及 PDF 编写器进程如何⽣成 PDF 指令流。苹果启用javascript
使⽤PyMuPDF抽取⽂字
安装PyMuPDF
pip install PyMuPDF
显⽰⽂档信息、打印页数和提取 PDF ⽂档的⽂本的⽅式与 PyPDF2 类似(参见例2)。 要导⼊的模块命名为fitz。
例⼦2:使⽤PyMuPDF抽取⽂档信息和内容
#!/usr/bin/python
import fitz
pdf_document ="example.pdf"
doc = fitz.open(pdf_document):
print("number of pages: %i"% doc.pageCount)
adata)
page1 = doc.loadPage(0)
page1text = Text("text")
print(page1text)
如下图所⽰,PyMuPDF 的好处在于它保持原始⽂档结构完整 - 带有换⾏符的整个段落保持在 PDF ⽂档中的原样。
使⽤PyMuPDF 抽取⽂字是个好的选择
使⽤PyMuPDF抽取图⽚
PyMuPDF 使⽤ getPageImageList() ⽅法简化了从 PDF ⽂档中提取图像的过程。例⼦3 基于 PyMuPDF 从pdf中逐页提取 PDF 中的所有图像并将其保存为 PNG ⽂件。 如果图像具有 CMYK ⾊彩空间,则⾸先将其转换为 RGB。
例⼦3:使⽤PyMuPDF抽取图⽚
#!/usr/bin/pythonpython解析json文件
import fitz
pdf_document = fitz.open("file.pdf")
for current_page in range(len(pdf_document)):
for image in PageImageList(current_page):
xref = image[0]
pix = fitz.Pixmap(pdf_document, xref)
if pix.n <5:# this is GRAY or RGB
pix.writePNG("page%s-%s.png"%(current_page, xref))
else:# CMYK: convert to RGB first
pix1 = fitz.Pixmap(fitz.csRGB, pix)
pix1.writePNG("page%s-%s.png"%(current_page, xref))
pix1 =None
pix =None
⽤⼏个pdf测试了下,发现会存⼀些像素全为0的图像
使⽤PyPDF2将⼀个PDF⽂件分割成多个PDF⽂件
例⼦4:使⽤PyPDF2将⼀个PDF⽂件分割成多个PDF⽂件
#!/usr/bin/python网页代码怎么打开快捷键
#!/usr/bin/python
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf_document ="example.pdf"
pdf = PdfFileReader(pdf_document)
for page in NumPages()):
pdf = PdfFileReader(pdf_document)
pdf_writer = PdfFileWriter()
current_page = Page(page)
pdf_writer.addPage(current_page)
outputFilename ="example-page-{}.pdf".format(page +1)
with open(outputFilename,"wb")as out:
pdf_writer.write(out)
print("created", outputFilename)
使⽤PyMuPDF抽取包含指定内容的页
这个⽤例⾮常实⽤,⼯作⽅式类似pdfgrep。使⽤ PyMuPDF,脚本返回包含给定搜索字符串的所有页
码。页⾯⼀个接⼀个地加载,并在searchFor() ⽅法的帮助下检测所有出现的搜索字符串。 如果匹配,则会在标准输出上打印相应的消息。
例⼦5:使⽤PyMuPDF抽取包含指定内容的页
#!/usr/bin/python
import fitz
filename ="example.pdf"
excel如何生成随机数字search_term ="invoice"
pdf_document = fitz.open(filename)
for current_page in range(len(pdf_document)):
page = pdf_document.loadPage(current_page)
if page.searchFor(search_term):
print("%s found on page %i"%(search_term, current_page))
总结
本⽂简单介绍如何使⽤python解析PDF⽂件,PyMuPDF和PyPDF2是两个常⽤的python包。
选择结构switch程序流程图
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论