2016-05-25 1 views
-1

Моя проблема описать это изображение http://185.49.12.119/~pogdan/7spacedot/7spacedot.jpg входной файл http://185.49.12.119/~pogdan/7spacedot/monitor_2016_99.pdfitextpdf вставка пространство beetwen 7 и точка после экстракта текста

выходной файл http://185.49.12.119/~pogdan/7spacedot/monitor_2016_99.txt

все установленные файлы с банкой и Явы http://185.49.12.119/~pogdan/7spacedot/

Почему itextpdf вставить пространство? как удалить его? Заменить 7. -> 7. Не решил для меня.

ответ

0

Почему itextpdf вмещает пространство?

IText вставляет пробелы всякий раз, когда имеется зазор между двумя последовательными кусками текста, который больше, чем определенное количество, или если два последовательных текстовых куски перекрываются. Он делает это, чтобы сигнализировать, что куски не следуют друг за другом обычным способом.

В случае документа точка после семи часто перемещается влево, насколько это возможно, так что характер ограничивающей коробки перекрываются:

Sample overlapping 7 and .

как его удалить?

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

В текущем 5.5.9 код выглядит следующим образом:

if (result.charAt(result.length()-1) != ' ' && renderInfo.getText().length() > 0 && renderInfo.getText().charAt(0) != ' '){ // we only insert a blank space if the trailing character of the previous string wasn't a space, and the leading character of the current string isn't a space 
    float spacing = lastEnd.subtract(start).length(); 
    if (spacing > renderInfo.getSingleSpaceWidth()/2f){ 
     appendTextChunk(" "); 
     //System.out.println("Inserting implied space before '" + renderInfo.getText() + "'"); 
    } 
} 

Источник вашей древней версии IText все еще может выглядеть примерно здесь. И здесь вы должны изменить логику, чтобы не вставлять пробелы для обратных шагов или, по крайней мере, только для более крупных.


Как ОП пояснил в комментарии, используя

float spaceWidth = renderInfo.getSingleSpaceWidth() * 3f/2f; 
float diffI1 = start.subtract(lastEnd).get(Vector.I1); 
if (spacing > spaceWidth && diffI1 > 0) 
{ 
    result.append(" "); 
} 

работает хорошо в его случае. Это, однако, не означает, что обычно следует изменить код стратегии таким образом, поскольку он предполагает, что пишутся ориентированные в направлении положительной оси x. Более того, оптимальное значение константы, на которое умножается renderInfo.getSingleSpaceWidth(), также зависит от типа документа, см. например this case.

+0

Спасибо за объяснение. Я пытаюсь сделать это так: float diffI1 = lastEnd.subtract (start) .get (Vector.I1); if (diffI1> 0) {appendTextChunk();} но это не так. – pogdan

+0

Что происходит вместо этого? – mkl

+0

результат такой же, как раньше http://185.49.12.119/~pogdan/7spacedot/7spacedot1.jpg \t \t // 127670. LELY EAST -> LEL Y EAST :( float spacing = lastEnd.subtract (start). length(); float spaceWidth = renderInfo.getSingleSpaceWidth()/2f; float diffI1 = lastEnd.subtract (start) .get (Vector.I1); if (spacing> spaceWidth && diffI1> 0) { результат.append (""); } – pogdan

Смежные вопросы