なぜitextpdfにスペースを挿入しますか?
二つの連続するテキストチャンクがと重なる場合、一定量よりも大きいか、二つの連続するテキストチャンクの間に隙間があるときはいつでもiTextのスペースを挿入します。それは、チャンクが通常のやり方で互いに従わないことを知らせるためです。それを削除する方法
![Sample overlapping 7 and .](https://i.stack.imgur.com/OOaH5.png)
:
は、ドキュメントの場合は7以下のドットは、多くの場合、文字のバウンディングボックスがオーバーラップするように可能な限り左に移動しますか?
これを望まない場合は、それに応じて使用するテキスト抽出方法を調整する必要があります。現在の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のバージョンのソースはまだここに似て見えるかもしれません。これはバックステップのスペースを挿入しないようにロジックを変更しなければならない場所です。
OPは、彼の場合にはうまく機能
float spaceWidth = renderInfo.getSingleSpaceWidth() * 3f/2f;
float diffI1 = start.subtract(lastEnd).get(Vector.I1);
if (spacing > spaceWidth && diffI1 > 0)
{
result.append(" ");
}
を使用して、コメントで説明したように。しかし、これは、一般に、x軸の方向に書かれた書込みを想定しているため、このように戦略コードを変更する必要があるということを意味しません。さらに、renderInfo.getSingleSpaceWidth()
が乗算される定数の最適値は、手元のドキュメントタイプに依存します(cf.例えばthis case。
出典
2016-05-25 16:11:06
mkl
ありがとうございます。私はそれをこのようにしようとしています。float diffI1 = lastEnd.subtract(start).get(Vector.I1); if(diffI1> 0){appendTextChunk();}しかし、そうではありません。 – pogdan
代わりに何が起こるのですか? – mkl
結果は以前と同じです。http://185.49.12.119/~pogdan/7spacedot/7spacedot1.jpg \t \t // 127670。 浮動小数点間隔= lastEnd.subtract(start)。 (spacing> spaceWidth && diffI1> 0){ 結果:float spaceWidth = renderInfo.getSingleSpaceWidth()/ 2f; float diffI1 = lastEnd.subtract(start).get(Vector.I1); ifappend( ""); } – pogdan