python 解析 PDF 文件
- 三方库:
py-pdf-parser
- 官方文档:
https://py-pdf-parser.readthedocs.io/en/latest/examples/order_summary.html
from py_pdf_parser import tables
from py_pdf_parser.loaders import load_file
# 加载PDF文件
document = load_file(pdf_path)
常用方法介绍
获取字体
获取 PDF 内字体set(element.font for element in document.elements)
,可以将字体映射为字典,如:
FONT_MAPPING = {
"BAAAAA+LiberationSerif-Bold,16.0": "title",
"BAAAAA+LiberationSerif-Bold,12.0": "sub_title",
"CAAAAA+LiberationSerif,12.0": "text",
"DAAAAA+FreeMonoBold,12.0": "table_header",
"EAAAAA+FreeMono,12.0": "table_text",
}
按映射字体加载文件
在加载文件时指定参数font_mapping
,如:load_file(pdf_path, font_mapping=FONT_MAPPING)
按文本匹配
filter_by_text_contains()
:包含某指定的字符串,如:document.elements.filter_by_text_contains('Money')
filter_by_text_equal()
:等于指定的字符串,如:document.elements.filter_by_text_equal('Money')
按字体匹配
filter_by_font()
:匹配指定的某一个字体,如:section.elements.filter_by_font("table_header")
filter_by_fonts()
:匹配指定的多个字体,如:section.elements.filter_by_fonts("table_header", "table_text")
按页匹配
filter_by_page()
:匹配指定的某一页,如:document.elements.filter_by_page(2)
filter_by_pages()
:匹配指定的某几页,如:document.elements.filter_by_pages(2, 4)
提取图片内文本
py-pdf-parser
默认不支持提取图片内的文本信息,但是可以通过指定加载时的参数la_params
实现文本提取,该参数为pdfminer.six
的参数,文档也有详细介绍。如:load_file(pdf_path, la_params={"all_texts": True})
。
提取表格
提取表格需要指定表格的起始位置,即创建section
# 表格起始结束标记位置
start_element = money_elements.extract_single_element()
end_element = summary_elements.extract_single_element()
# 选取表格区域
money_receive_section = document.sectioning.create_section(
name='money_receive',
start_element=start_element,
end_element=end_element,
include_last_element=False
)
# 提取表格信息
money_receive_table = tables.extract_table(
money_receive_section.elements.filter_by_fonts("table_header"),
as_text=True,
fix_element_in_multiple_cols=True
)
更多方法请参考官方文档……