Чтение данных ascii с помощью iText не удается

Попытка прочитать данные ascii из простого файла PDF в С#.NET 8 с помощью iText7

StringBuilder processed = new StringBuilder();

    for (int i = 1; i <= pdfDocument.GetNumberOfPages(); ++i)
    {
         var page = pdfDocument.GetPage(i);
         string text = PdfTextExtractor.GetTextFromPage(page, strategy);
         processed.Append(text);
    }

возвращает искаженный текст

����������\n��������������������������\n

Текст можно скопировать из PDF в программе просмотра Adobe Acrobat PDF.

PDF находится в

https://wetransfer.com/downloads/e21c2093f9a732287383fc5ca97104cd20240414124039/b3ad1e

Как прочитать текст из этого PDF-файла? Можно ли настроить iText или использовать какую-либо другую библиотеку для чтения PDF-файлов?

Об этом уже спрашивали

Чтение текста из pdf с помощью iText7 + C#, текст не распознается

но не решено.

PDF — это не текст. Это собственный двоичный файл. Некоторые данные могут выглядеть как обычный текст, но текст окружают управляющие символы (двоичные символы).

jdweng 14.04.2024 16:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

PDF-файл имеет неверную таблицу шрифтов и дополнительную проблему смещения текста (перекрытия).

Есть два способа справиться с таким файлом (он хорошо выглядит в Acrobat), но в других приложениях он ведет себя неправильно, и оба перепечатываются.

Я попробовал несколько способов и пришел к выводу, что Acrobat Print в GhostScript Postscript лучше всего подходит, поскольку PDF в PDF просто переносит ошибки. Затем преобразуйте Postscript в GhostScript обратно в PDF.

Вы можете использовать старый метод командной строки: запустить Poppler/Xpdf PDFtoPS или GhostScript, преобразовать в PS, а затем GhostScript PS обратно в PDF. Но он все равно будет иметь смещенный текст.

Как только шрифты будут решены, вы можете попробовать еще раз с помощью iTeXt, или я просто запустил poppler PDFtoTeXT, чтобы удалить превышение. Ссылка на последнюю текущую 64-битную версию. Пользователям 32-разрядной версии Windows и другим пользователям может потребоваться инструменты командной строки Xpdf: на данный момент версия 4.05 ( https://www.xpdfreader.com/download.html). Так, например, с попплером и целевой страницей 1.

ПРИМЕЧАНИЕ. С этим конкретным файлом Poppler работал заметно лучше, чем Xpdf. Однако ваши результаты могут различаться в зависимости от языка, ввода, платформы и настроек!

pdftotext -layout -nopgbrk -enc UTF-8   -fixed 3.1 "in-fixed.pdf"  "out.txt"

Результат

                                                                                             Tarnija:                                                                        Rolling OÜ
                                                                                             Registrikood / KMKR nr.:                                        12571469 /     EE101695107
                                                                                             Aadress:                                                       Betooni tn 1, Tallinn, 11415
                                                                                             Kaupade väljastamiskoht:                                       Betooni tn 1, Tallinn, 11415
                                                                                             Panga nimetus:                                                    SEB PANK AS, EEUHEE2X

          Arve:             2403793            EST                      09.04.2024
                                                                                             Panga konto:                                                       EE131010220225504229
                                                                                             Kontaktinformatsioon:                                Telefon: 6 280 808; Faks: 6 280 809
          Maksekuupäev:                                                 09.05.2024           Teie kontaktisik:                                                          Angelina Burtseva

          Vedaja:                                                       ROLLING OÜ           Saaja:                                                             DGM SHIPPING, AS
          Registreerimisnumber:                                              12571469
          Sõiduki juhi eesnimi, perekonnanimi:                                               Kliendi number                                                                         71771
          Sõiduki registreerimisnumber:                                                      Registrikood / KMKR nr.:                                         10061617 / EE100412077
          Tehingu kirjeldus:                                        kaupade tarnimine        Aadress:                                                   A. Puškini tn 9-6, Narva, 20309
          Piirkond:                                             NEW - EAST TALLINN           Kaupade kättesaamiskoht:                       Nurmevälja tn 1 Maardu Harjumaa 74114
                                                                                             Panga nimetus:
                                                                                             Panga konto:
          Makseviis:                                                            30 days      Maksja:                                                                  DGM SHIPPING, AS

          Kommentaar:
          Kaubad on tarnija omand seni, kuni nende eest on täielikult tasutud

                                                                                                                                       Kogus/           Hind                 Summa
              Artikkel             Nimetus                                                                                                                          %
                                                                                                                                         Ühik        ilma KM                 ilma KM

                                   Saateleht 2405326 [STOCK] (EAST)
                                   Nurmevälja tn 1 Maardu Harjumaa 74114
           17-02-0206              Paberrätik Tork Basic M2, 280 m, 1 kiht, valge 6 rulli, 140002                                           1 IEPAK        30.05      4.1            28.82
           17-26-0269              Tänavahari Saima Broom, 25 x 120 cm, must/punane                                                         1 GAB           9.16      4.9             8.71
           08-05-0005              Käärid Office Point, 15.5 cm, Soft-Grip                                                                  1 TÜKK          1.35     17.5             1.11
           04-07-0238              Ilmastikukindlad kleebisetiketid Herma 99.1 x 93.1 mm, 25 lehte, valged, väga tugeva kinnitusega         1 IEPAK        30.85     15.7            26.01
           17-01-0128              Tualettpaber Jumbo Clean, 12 rulli, 2 kihti, valge                                                       1 IEPAK        23.80      4.5            22.73
                                   Saateleht 2404987 [STOCK] (EAST),DMM, Viidud, 03.04.2024, 13:46
                                   Nurmevälja tn 1 Maardu Harjumaa 74114
           04-02-0225              Märkmepaber Forofis, 51x76mm,100p., kollane                                                              3 GAB           0.46     20.4             1.10
...
continued down to
...
           05-01-0010              Ümbrikud iseliimuva kleepribaga, C5, 25 tk. Valge                                                        2 PK            1.37     17.0             2.27
           05-01-0008              Ümbrikud iseliimuva kleepribaga, C6, 25 tk. Valge                                                        4 PK            0.87     17.1             2.88
           01-05-0197              Sissetõmmatav geelist tindipliiats ErichKrause Smart-Gel, 0,5 mm, tindi värv: sinine                    12GAB            0.60     18.4             5.88

Обсуждение в комментариях показало, что желательны только небольшие части страниц 1 и 4, и это можно сделать непосредственно на источнике низкого качества с помощью poppler PDFtoText.

Например, чтобы извлечь строку из одного или двух слов или области, которую мы можем использовать,

pdftotext -f 1 -l 1 -layout -enc UTF-8 "rolling garbage Arve_24037931.pdf" - 2>nul |Findstr "Rolling EST KMKR Makseku" >temp.txt

Пока что это соответствует странице 1. Обратите внимание, что запрос не может включать акценты UTF, но результат может!

                                                                           Tarnija:                                                             Rolling OÜ
                                                                           Registrikood / KMKR nr.:                                12571469 / EE101695107
Arve:          2403793 EST                            09.04.2024
Maksekuupäev:                                         09.05.2024           Teie kontaktisik:                                                Angelina Burtseva
Sõiduki registreerimisnumber:                                              Registrikood / KMKR nr.:                             10061617 / EE100412077

Аналогично мы можем добавить данные снизу страницы 4.

pdftotext -f 4 -l 4 -layout -enc UTF-8 "rolling garbage Arve_24037931.pdf" - 2>nul |Findstr "Summa 22% Kokku" >>temp.txt

Итак, теперь у нас есть основные данные.

                                                                           Tarnija:                                                             Rolling OÜ
                                                                           Registrikood / KMKR nr.:                                12571469 / EE101695107
Arve:          2403793 EST                            09.04.2024
Maksekuupäev:                                         09.05.2024           Teie kontaktisik:                                                Angelina Burtseva
Sõiduki registreerimisnumber:                                              Registrikood / KMKR nr.:                             10061617 / EE100412077
                                                                                                       Kogus/          Hind              Summa
                                                                                           Summa ilma käibemaksutaEUR                        370.37
                                                                                       *2403793r*                         22%EUR                  81.48
                                                                                                                        KokkuEUR             451.85

Текст извлекается в контроллере MVC, который ежедневно обрабатывает множество файлов PDF. Должен ли в этом случае Ghostscript выполняться два раза с контроллера, чтобы преобразовать его в ps, а затем ps обратно в pdf? PDF-файл открывается в iText. Может быть, можно исправить таблицу шрифтов, чтобы не требовался запуск Ghostscript? Из текста извлекаются только номер счета, имя клиента, общая сумма и НДС. Перекрывающийся текст находится в середине счета, и эта часть счета не используется для обработки. Или, может быть, есть какой-нибудь пакет .net, который можно использовать для исправления PDF, чтобы избежать запуска внешнего приложения на сервере?

Andrus 14.04.2024 21:28

Ошибка только в одном файле. Тот же клиент может отправить новый PDF-файл в будущем, и, вероятно, у него возникнет та же проблема. Мне нужны Arve: 2403793, ROLLING OÜ, 12571469 и даты с первой страницы, а сумма 370.37 и НДС 81.48 с последней страницы. Может быть, есть какое-то другое программное обеспечение, которое может извлечь текст из этого PDF-файла, как это делает Acrobat Copy, или этот текст может быть извлечен из ps или другого файла? Приложение ASP.NET работает в Windows и Linux. Было бы лучше избегать запуска внешних приложений с контроллера на сервере.

Andrus 14.04.2024 22:27

Попробовал pdftotext с xpdfreader.com/download.html. Оригинальный PDF-файл по-прежнему не открывается. Требуется ли Ghostscript для извлечения этого PDF-файла?

Andrus 15.04.2024 12:02

Другие вопросы по теме