Мне нужно выполнить низкоуровневое извлечение текста с помощью PRTokeniser
Для некоторых файлов PDF все хорошо, но для некоторых других я получаю пустые строки (или, скорее, строку, состоящую из пустых полей или пустых символов).
Все такие файлы следуют этой схеме:
endobj
7 0 obj
<</BaseFont/RDZRPI+TimesNewRoman/FontDescriptor 8 0 R/Type/Font
/FirstChar 1/LastChar 10/Widths[ 444 500 444 500 444 333 500 500 278 250]
/Encoding 11 0 R/Subtype/TrueType>>
endobj
11 0 obj
<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
1/a/b/c/d/e/f/g/h/i/space]>>
endobj
Каждый символ в значении строки токена не является кодом ASCII или ANSI, а является индексом массива различий.Например, если у меня есть строка типа «abc», я получу 1,2,3.Тогда iTextSharp будет понимать такие коды как коды ASCII и отображать их как пустые квадратные блоки или любой другой символ.
Поэтому мне нужно получить массив подмножеств: число 1 - это «a», число 2 - это «b»."...
Проблема в том, что массив basefont.differences имеет только пустые значения, и поэтому я не знаю, как перестроить строку.
С другой стороны, стратегия. Рендерит GetResultantTextсодержание страницы правильно, но мне нужно гораздо больше деталей, и именно поэтому я использую PRTokeniser, хотя я застрял с этой проблемой шрифта.
Есть идеи?
PDFВсе потоки выглядят так:
/FirstChar 1/LastChar 8/Widths[ 722 444 278 500 250 944 333 500]
/Encoding 11 0 R/Subtype/TrueType>>
endobj
11 0 obj
<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
1/H/e/l/o/space/W/r/d]>>
В этом случае в PDF есть только это предложение: Hellow Word.Поэтому массив chars будет:
1 H
2 e
3 l
4 o
5 space
6 W
7 r
8 d
Мне нужно найти такой массив, используя iTextSharp, чтобы расшифровать строковые токены.
Спасибо