代码之家  ›  专栏  ›  技术社区  ›  barteloma

如何阅读表格?

  •  0
  • barteloma  · 技术社区  · 7 年前

    我有一个pdf格式的时间表。

                (1)     (2)     (3)
                09:00   10:30   11:30            
    Monday      12C     11B     10A
    Tuesday     10K     10K     9A
    Wednesday           7A
    Thursday    7B      7B
    Friday      6A              11B
    

    我正在使用iTextSharp阅读所有文本。

        private static string ReadFile(string path)
        {
            using (var reader = new PdfReader(path))
            {
                var text = new StringBuilder();
    
                for (var i = 1; i <= reader.NumberOfPages; i++)
                    text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
    
                return text.ToString();
            }
        }
    

    文本响应行如下:

    (1) (2) (3) 
    09:00 10:30 11:30
    12C 11B 10A
    Monday
    10K 10K 9A
    Tuesday
    7A
    Wednesday
    B 7B
    Thursday
    6A  11B
    Friday
    

    所以我不明白哪个班在哪个时间?例如,星期三有7A班,但是什么时候(09:00或10:30或11:30)? 如果它写一个空白字符,我可以理解。

    (1) (2) (3) 
    09:00 10:30 11:30
    12C 11B 10A
    Monday
    10K 10K 9A
    Tuesday
    &nbsp 7A &nbsp
    Wednesday
    B 7B &nbsp
    Thursday
    6A &nbsp 11B
    Friday
    

    这可以用iTextSharp吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joris Schellekens    7 年前

    这在一般情况下是不可能的。

    如果未标记PDF文档,则文档本身不包含结构信息。或者简单地说,文档不知道哪些部分是表、表行甚至段落。

    从未标记的pdf文档中提取结构信息是困难的。如果不是一般情况下说不可能的话。

    使用pdf2data,您可以实现这一点。需要注意的是,必须预先定义模板。所以你需要告诉软件在哪里可以找到一张桌子。

    你可以看看 SimpleTextExtractionStrategy 在里面 iText . 它本质上处理所有呈现信息,并决定何时将文本连接到现有缓冲区。

    在代码中的某个时刻,它决定如果缓冲区已经以空白结尾,则不应再追加空白。

    我建议您创建自己的实现 简单扩展策略 重写此行为并始终插入空白。