iText PDF плохая конвертация символов

1

У меня есть PDF для чтения, что делает меня craszy.

В pdf представлен счет за электроэнергию (на итальянском языке) клиента, и он хочет, чтобы я прочитал текст.

Теперь проблема. Когда я копирую текст вставки из pdf в блокнот, я получаю кучу непонятных символов...

после многих исследований я нашел свой ответ. PDF содержит все шрифты, но не ontiene cmap, соответствующие разрешению экспорта текста. Я нашел эту ссылку, которая ссылается, однако, на более старую версию itext (я использую версию 5.5.5).

то, что я хочу достичь, если это возможно, это преобразование текста из символьного кода в Юникод.

Я нашел некоторую ссылку на Cmap-something, но dunno, как использовать их, и, по-видимому, нет примеров в сети :(

это то, что я пробовал

PdfReader reader = new PdfReader("MyFile.pdf");
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
PrintWriter out = new PrintWriter(new FileOutputStream(txt));
TextExtractionStrategy strategy;
strategy = parser.processContent(1, new SimpleTextExtractionStrategy());
String text = strategy.getResultantText();
String cmapFile="UnicodeBigUnmarked";
byte[] text = encodedText.getBytes();
String cid = PdfEncodings.convertToString(text, cmapFile);

Сид - симпатичная японская последовательность символов

а также:

FontFactory.registerDirectory("myDirectoryWithAllFonts");

Перед попыткой конверсии. Это решение не дает никаких результатов

Любая помощь будет оценена.

Теги:
pdf
itext

1 ответ

2
Лучший ответ

Вы говорите: когда я копирую текст вставки в pdf в блокнот, я получаю кучу непонятных персонажей. Я предполагаю, что вы говорите о выборе текста в Adobe Reader и пытаетесь вставить его в текстовый редактор.

Если это не удается, у вас есть PDF, который не позволяет извлекать текст из PDF, потому что текст не сохраняется в PDF правильно. Посмотрите это видео для полного объяснения.

Позвольте взглянуть на ваш PDF изнутри:

Изображение 174551

Мы видим начало текстового объекта (где он говорит BT который обозначает Begin Text). Шрифт /C2_1 определяется с размером шрифта 1. На первый взгляд это может выглядеть странно, но шрифт будет масштабироваться до размера 6.9989 при преобразовании. Затем мы видим некоторые текстовые массивы, содержащие строки двухбайтовых символов, такие как IRHEZMWMSRIHIP.

Как IText интерпретировать эти символы? Чтобы узнать, нам нужно посмотреть на кодировку, которая используется для шрифта, соответствующего /C2_1:

Изображение 174551

Aha, символы Unicode, хранящиеся в потоке контента, соответствуют фактическим символам, которые нам нужны: IRHE ZMWMSRI HIP и так далее. Именно это мы видим при преобразовании PDF в текст с помощью iText.

Но подождите минутку! Почему мы видим других персонажей, когда смотрим на PDF с помощью Adobe Reader? Ну, такие символы, как I, R, H и т.д., Являются адресами, которые соответствуют "программе" глифа. Эта программа отвечает за рисование символа на странице. Можно было бы ожидать, что в этом случае символ, который I бы соответствовал глифу (или "чертеж", если вы предпочитаете это слово) буквы I Нет такой удачи в вашем PDF файле.

Теперь, что делает Adobe, когда вы используете "Копировать с форматированием"? Множество волшебства, которое в настоящее время не реализовано в iText. Почему нет? Хм... Я не знаю бюджет Adobe, но он, вероятно, намного, намного выше бюджета iText Group. Извлечение текста из документов, содержащих запутанную информацию о шрифтах, отсутствует в технической дорожной карте iText Group.

  • 0
    хм, ваше предположение верно, но я могу использовать функцию «Копировать с форматом» в Adobe XI, а затем успешно выполнить ее. В любом случае я собираюсь посмотреть видео
  • 2
    Пожалуйста, поделитесь PDF, чтобы мы могли на него взглянуть.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню