PDFium Delphi Component 文件

ExtractTables 方法

组件: TPdf  ·  单元: PDFium
从当前 PDF 页面检测并提取表格结构

语法

function ExtractTables(
  const Options: TPdfTableExtractionOptions): TPdfTables;

说明

标尺线策略将原生描边路径段变换到页面坐标,隔离连通网格,并在局部缺少分隔线时合并相邻的基础单元格

启用 DetectFilledRulings 后,同一策略还会读取填充几何:厚度不超过 MaxRulingThickness 的填充矩形沿其长轴成为一条标尺线,而更大的填充矩形(例如带底纹的单元格)则贡献其四条边。随后每条标尺线坐标都会在 RulingSnapTolerance 范围内吸附,使逐单元格的边框碎片、双重边框以及带小沟槽的底纹单元格连接成一个网格。文字处理器和浏览器的导出文件就是这样绘制表格的,因此它们被报告为标尺线网格而不是空白片段。IncludeFormXObjects 会以合成后的矩阵遍历 form XObject

空白策略将原生单词框分组为可视行,并要求多个行上重复出现对齐的列锚点。已位于检测到的标尺线网格内部的单词会被排除,并且每个列边界都必须是一条竖直走廊,在所有两侧均有内容的行上不含任何文本,这样两端对齐的段落就不会被误报为表格

每个 TPdfTable 包含页面边界、RowCount 和列数、DetectionMode、置信度,以及带有文本、边界、IsHeader 状态、RowIndex、ColumnIndex、RowSpan 和 ColumnSpan 的 TPdfTableCell 值

输出

预算与调优

MinRows、MinColumns、AlignmentTolerance、RulingTolerance、MinColumnGap、MaxRowGapFactor 和 MinConfidence 控制检测;MinRows 对标尺线网格可以为 1,而空白检测始终至少需要两行

DetectFilledRulings、MaxRulingThickness、RulingSnapTolerance 和 IncludeFormXObjects 调整填充几何路径;默认值分别为开启、3 磅、4 磅和开启

MaxWords、MaxRulingSegments、MaxCells 和 MaxTables 在无界工作或分配发生前安全失败

示例

var
  Options: TPdfTableExtractionOptions;
  Tables: TPdfTables;
begin
  Options := TPdfTableExtractionOptions.Default;
  Tables := Pdf1.ExtractTables(Options);
  if Length(Tables) > 0 then
    Memo1.Text := Tables[0].ToCsv;
end;

参见

ExtractDocumentTables, BuildReflowDocument, GetStructuredText, PageWordBoxes