web-dev-qa-db-ja.com

iTextで文字列幅を計算する方法は?

私はPDFを書くためにiTextを使用しています。場合によっては、SetVisibleSignature関数を使用してPDFに署名する必要があります。この関数を使用して、コンテンツを書き込む長方形を指定する必要があります。

しかし、文字列の幅を計算するのは難しいので、PDFに署名を設定する前に長方形を設定できます。

ITextで文字列の幅を計算するにはどうすればよいですか?

22
MemoryLeak

BaseFont.getWidthPoint(String text, float fontSize)を使用して、文字列の幅をptで取得できます。

または、文字列をチャンクに入れてchunk.getWidthPoint()を実行します

27
Jan Soltis

受け入れられた回答_BaseFont.getWidthPoint_は、メソッドが静的ではなくなったため、itex5.5.4では機能しません。まだ存在していても、静的で限られたパラメーターを受け取るため、使用されている実際のフォント(そのファミリーまたは太字/斜体)は考慮されません。

chunk.getWidthPoint()は、後で説明するようにTrue Fontで機能しますが、特定の用途では、特にチャンクを後で使用する予定がない場合は、幅だけのチャンクを常に作成するのは無駄です。

これは、水平スケーリングを行っていないことを前提として、スタンドアロンの代替として使用するchunk.getWidthPoint()の基礎となるコードです。

_font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
_
16
rveach

ColumnText.getWidth( Phrase phrase ) を使用してこれを実行し、 Phrase の幅を で表示する前に)のサイズに設定しました。 ColumnText.showTextAligned

このスニペットでは、ColumnText.getWidthを使用して文字列の長さのサイズを変更し、ページの右上に配置しました。ポートレートA4で動作しますが、これ以上テストしていません。

Phrase phrase = new Phrase( "Bla bla bla!", new Font( FontFamily.HELVETICA, 9 ) );
float width = ColumnText.getWidth( phrase );

ColumnText.showTextAligned (
    canvas,
    Element.ALIGN_LEFT,
    phrase,
    canvas.getPdfDocument( ).right( ) - width,
    canvas.getPdfDocument( ).top( ) + 9,
    0
);
3
TT.