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

У меня есть расписание в формате 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)? Если он пишет пробельный символ ( ), я могу понять.

(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?


person barteloma    schedule 03.06.2018    source источник
comment
Вы пробовали подход из этот ответ?   -  person mkl    schedule 03.06.2018


Ответы (1)


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

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

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

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

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

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

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

person Joris Schellekens    schedule 04.06.2018
comment
Извлечение информации о структуре из документа PDF без тегов затруднено. Если не сказать невозможно в общем случае. - Да, но ОП хочет чего-то более простого (если я правильно понимаю вопрос, то есть): извлечение текста, которое более строго соблюдает положение символов в строке путем вставки переменное количество пробельных символов перед в зависимости от размера промежутка перед. В конце концов, это не было бы волшебством, ср. например этот ответ... - person mkl; 04.06.2018