在实际的系统开发中,处理 pdf 文件不仅限于读取整页文本,还有提取文档中的表格数据、图片或特定区域的内容。这些任务看似简单,实则对精度与处理能力提出了更高要求。本文将以 python 语言为例,结合 spire.pdf 控件,带你实战演练如何精准提取 pdf 中的表格、图片以及指定区域的文本内容,助力你高效完成数据分析、内容重用等任务。
安装 python 库
本文将使用 spire.pdf for python 来演示怎样完成 pdf 文档中的元素提取。作为一个独立的第三方组件,spire.pdf 不依赖微软 office,还可以兼容大部分国产系统,是你的 pdf 自动化好帮手。
通过 pip 命令安装它:
pip install spire.pdf
或使用:
pip install spire.pdf.free
安装免费版,免费版存在一些篇幅限制,但对于处理小型任务来说足够了。
提取 pdf 文本内容:获取整页文本与指定区域内容
通常情况下,提取 pdf 文档文本的需求主要有两种:
- 一种是提取整页或整份文档中的全部文本,如合同全文提取、批量归档场景。
- 另一种是提取特定区域内的文本,如从表单、票据中提取某一栏位内容。
在本章节,我们将使用 spire.pdf 来分别完成这两个任务。
获取页面上的所有文本内容
文本是 pdf 文档中最常见的内容形式。无论是提取整份合同内容,还是其他需要批量处理的文档,掌握 pdf 文本提取技巧都至关重要。本节将向你展示如何快速通过 python 从 pdf 文档中提取页面上的所有文本内容。
完整代码示例 - 获取第一页所有文本:
from spire.pdf import * from spire.pdf.common import * # 创建 pdfdocument 对象 pdf = pdfdocument() # 加载 pdf 文档 pdf.loadfromfile("/ai绘画的利与弊.pdf") # 获取 pdf 第一页,遍历文档所有页便可提取文档所有文本内容 page = pdf.pages.get_item(0) # 创建 pdftextextractor 对象 textextractor = pdftextextractor(page) # 创建 pdftextextractoptions 对象 extractoptions = pdftextextractoptions() # 从页面中提取文本 text = textextractor.extracttext(extractoptions) # 写入到 txt 文件中 extractedtext = open("/提取第一页文本.txt", "w", encoding = "utf-8") extractedtext.write(text) # 释放对象 extractedtext.close() pdf.close()
效果预览:
(python 提取 pdf 页面上的文本)
主要步骤解析:
- 创建新的 pdfdocument 对象,然后加载 pdf 文档。
- 获取文档的第一页或遍历所有页面以便提取整个 pdf 文档的文本。
- 创建 pdftextextractor 和 pdftextextractoptions 对象,用以提取文本。
- 通过 pdftextextractor.extracttext() 方法从所选页面中提取文本。
获取 pdf 特定区域的文本
有时候,我们不需要整页的内容,只想提取 pdf 里某个特定位置的文字,比如发票上的金额、表格里的某一栏,或者文件角落的签名。只需要用 spire.pdf 设置一下坐标,就能轻松搞定区域文本提取。
完整代码示例 - 获取第一页一个矩形区域内的文本:
from spire.pdf import * from spire.pdf.common import * # 创建pdfdocument 对象 pdf = pdfdocument() # 加载pdf文档 pdf.loadfromfile("e:/administrator/python1/input/ai绘画的利与弊-图片版.pdf") # 获取pdf第一页,遍历文档所有页便可提取文档所有文本内容 page = pdf.pages.get_item(0) #创建pdftextextractor 对象 textextractor = pdftextextractor(page) #创建pdftextextractoptions 对象 extractoptions = pdftextextractoptions() # 设置从矩形区域提取文本的选项 extractoptions.extractarea = rectanglef(80.0, 120.0, 450.0, 120.0) #从页面中提取文本 text = textextractor.extracttext(extractoptions) # 写入到 txt 文件中 extractedtext = open("e:/administrator/python1/output/提取特定区域文本.txt", "w", encoding = "utf-8") extractedtext.write(text) # 释放对象 extractedtext.close() pdf.close()
效果预览:
(python 提取 pdf 中特定区域的文本)
主要步骤解析:
- 创建新的 pdfdocument 对象,然后加载一个 pdf 文档。
- 获取文档的第一页。
- 创建 pdftextextractor 和 pdftextextractoptions 对象,用以提取文本。
- 使用 pdftextextractoptions.extractarea 属性设置页面区域范围。
- 通过 pdftextextractor.extracttext() 方法从所指定的页面区域中提取文本。
注意事项:extractoptions.extractarea = rectanglef(80.0, 120.0, 450.0, 120.0) 中的四个参数依次代表矩形区域的 x 坐标、y 坐标、宽度 和 高度。通过调整这些数值,你可以灵活控制需要提取文本的区域位置和大小,确保仅获取你想要的内容。
提取 pdf 中的表格并导出为 csv
在 pdf 文档中,表格通常以非结构化的形式存在,直接提取和复用并不容易,尤其是遇到无边框、合并单元格或跨页表格的时候。本节我们将介绍如何使用 spire.pdf 和 spire.xls 准确识别 pdf 中的表格内容,并将其导出为结构化格式,如 excel 或 csv,帮助你实现高效的数据处理与复用。
完整代码示例 - 提取 pdf 表格并保存为 csv:
from spire.pdf import * from spire.pdf.common import * from spire.xls import * # 创建 pdfdocument 对象 doc = pdfdocument() # 加载 pdf 文档 doc.loadfromfile("/population.pdf") # 创建 workbook 对象 workbook = workbook() # 清除默认工作表 workbook.worksheets.clear() # 创建 pdftableextractor 对象 extractor = pdftableextractor(doc) sheetnumber = 1 # 遍历pdf文件中的页面 for pageindex in range(doc.pages.count): # 从当前页面提取表格 tablelist = extractor.extracttable(pageindex) # 遍历表格 if tablelist is not none and len(tablelist) > 0: for table in tablelist: # 为当前表格添加一个工作表 sheet = workbook.worksheets.add(f"sheet{sheetnumber}") # 获取表格的行数和列数 row = table.getrowcount() column = table.getcolumncount() # 遍历表格的行和列 for i in range(row): for j in range(column): # 获取当前单元格中的文本 text = table.gettext(i, j) # 将文本写入工作表的指定单元格 sheet.range[i + 1, j + 1].value = text sheetnumber += 1 # 将工作簿保存为 excel 文件 workbook.savetofile("/提取表格.csv", fileformat.csv) workbook.dispose() doc.close()
效果预览:
(python 提取 pdf 中的表格并保存为 csv)
主要步骤解析:
- 创建 pdfdocument 实例并加载 pdf 文档。
- 创建 workbook 实例。
- 遍历 pdf 中的所有页面。
- 使用 pdftableextractor.extracttable() 方法提取页面中的表格。
- 遍历提取的表格,并使用 workbook.worksheets.add() 方法向工作簿中添加工作表。
- 使用 pdftable.gettext() 方法获取 pdf 表格单元格中的文本。
- 利用 worksheet.range[].value 属性将文本写入工作表的特定单元格。
- 使用 workbook.savetofile() 方法将结果工作簿保存为 csv 文件。
注意事项:要将表格保存为 csv 或 excel 文件,需要用到 spire.xls。你可以通过:pip install spire.xls 将其安装到设备上。
快速提取 pdf 文档中的图片
在 pdf 文档中,除了文本和表格,图片也是常见的内容形式,尤其是在宣传材料、报告或扫描文档中更为常见。这些图片可能是位图,也可能是矢量图,提取方式各不相同。本节将带你了解如何使用 spire.pdf 快速识别并提取页面中的嵌入图片,并将其保存为常用格式(如 png、jpeg),方便后续的归档、分析或内容重用。
完整代码示例 - 提取 pdf 文档中的所有图片:
from spire.pdf.common import * from spire.pdf import * # 创建 pdfdocument 对象 doc = pdfdocument() # 加载 pdf 文档 doc.loadfromfile("/ai绘画的利与弊.pdf") # 创建 pdfimagehelper 对象 image_helper = pdfimagehelper() image_count = 1 # 遍历文档中的页面 for i in range(doc.pages.count): # 获取当前页面中的图片信息 images_info = image_helper.getimagesinfo(doc.pages[i]) # 获取图片并将其保存为图片文件 for j in range(len(images_info)): image_info = images_info[j] output_file = f"/new folder/image{image_count}.png" image_info.image.save(output_file) image_count += 1 doc.close()
效果预览:
(python 提取 pdf 中的所有图片)
主要步骤解析:
- 创建 pdfdocument 实例并加载一个 pdf 文档。
- 创建 pdfimagehelper 对象。
- 遍历所有页面。
- 通过 pdfimagehelper.getimagesinfo(page: pdfpagebase) 方法获取页面中的图片信息。
- 遍历获取结果,使用 pdfimageinfo.image.save() 方法将每张图片保存为图片文件。
总结
今天的文章中,我们展示了如何在 python 中精准提取 pdf 文档中的文本、表格和图片。无论是批量处理合同、公文,还是提取数据用于系统集成,spire 控件都能为开发者提供稳定、高效的支持。随着文档数字化和自动化处理需求不断增长,掌握这类工具的使用将为日常开发工作带来显著效率提升。
到此这篇关于python实现精准提取 pdf中的文本,表格与图片的文章就介绍到这了,更多相关python提取 pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论