You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apryse OCR(PDFTron.NET 11.3.0)文本提取乱序及表格提取问询

问题分析与解决方案

一、文本提取乱序的排查与修复

1. 排序策略问题

默认文本提取基于文本块坐标排序,若未指定符合阅读逻辑的排序规则,表格区域的表头、内容块可能因坐标计算偏差导致顺序错乱。需确保提取时启用自然阅读顺序排序(从上到下、从左到右)。

2. 代码实现优化

如果你的代码仅用基础的ExtractText()方法,这类方法不处理表格结构,仅按文本块物理位置拼接,容易出现乱序。改用TextExtractor并设置排序模式:

using (PDFDoc doc = new PDFDoc(inputPath))
{
    doc.InitSecurityHandler();
    // 先执行OCR(扫描PDF必须步骤)
    OCRModule.ProcessPage(doc.GetPage(1), OCRModule.OCRParams());
    
    TextExtractor txtExtractor = new TextExtractor();
    // 设置按阅读顺序排序
    txtExtractor.SetSortMode(TextExtractor.SortMode.e_sort_by_position);
    txtExtractor.Begin(doc.GetPage(1));
    string extractedText = txtExtractor.GetAsText();
}

注意:扫描PDF必须先完成OCR识别,否则提取的是无结构的图像文本,必然乱序。

3. 图像预处理

若原扫描件存在倾斜、变形,OCR识别出的文本块坐标会偏移,导致排序错误。可先调用ImagePreprocessingModule.Deskew纠正页面倾斜后再执行OCR。


二、表格结构化提取支持情况

Apryse PDFTron 11.3.0完全支持表格识别与结构化提取,可保留文本与表格的先后顺序,并输出带<Table>标签的结构化内容。

1. 结构化提取实现

使用StructuredOutputModule提取包含表格结构的内容,示例代码:

using (PDFDoc doc = new PDFDoc(inputPath))
{
    doc.InitSecurityHandler();
    // 执行OCR(扫描PDF必备)
    OCRModule ocr = new OCRModule();
    ocr.StartOCR(doc, "", OCRModule.OCRParams());
    
    StructuredOutputModule structOutput = new StructuredOutputModule();
    var options = new StructuredOutputModule.Options();
    options.SetIncludeTables(true); // 启用表格识别
    options.SetOutputFormat(StructuredOutputModule.OutputFormat.e_XML); // 输出XML格式
    
    string xmlContent = structOutput.Process(doc, options);
    // 输出内容中会包含<Table>、<TR>、<TD>等标签,严格保留原文档顺序
}

2. 自定义标签调整

若需要定制<Table>标签格式,可对提取后的XML结果做二次处理,或通过StructuredOutputModule的高级参数调整输出结构。


内容的提问来源于stack exchange,提问作者Kaif Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:27:19