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
)

更多方法请参考官方文档……