Как читать таблицу? - PullRequest
       39

Как читать таблицу?

0 голосов
/ 03 июня 2018

У меня есть расписание в файле 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

Так что я не могу понять, какой класс в какое время?Например, среда имеет класс 7А, но в какое время (09:00 или 10:30 или 11:30)?Если я напишу пробел charecter (), я пойму.

(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 Ответ

0 голосов
/ 04 июня 2018

В общем случае это невозможно.

Если документ PDF не помечен тегом, сам документ не содержит информации о структуре.Проще говоря, документ не знает, какие части являются таблицами, или строками таблицы, или даже абзацами.Если не сказать невозможно в общем случае.

Используя pdf2Data, вы можете добиться этого.Предостережение заключается в том, что вы должны определить шаблон заранее.Поэтому вам нужно сообщить программе, где она может ожидать таблицу.

Вы можете взглянуть на SimpleTextExtractionStrategy в iText.Он по существу обрабатывает всю информацию рендеринга и решает, когда объединить текст с существующим буфером.

В некоторый момент кода он решает, что, если буфер уже заканчивается пробелом, больше пробела не должно добавляться.

Я бы предложил вам создать собственную реализацию SimpleTextExtractionStrategy, которая переопределяет это поведение и всегда вставляет пробелы.

...