私はPDFを書くためにiTextを使用しています。場合によっては、SetVisibleSignature
関数を使用してPDFに署名する必要があります。この関数を使用して、コンテンツを書き込む長方形を指定する必要があります。
しかし、文字列の幅を計算するのは難しいので、PDFに署名を設定する前に長方形を設定できます。
ITextで文字列の幅を計算するにはどうすればよいですか?
BaseFont.getWidthPoint(String text, float fontSize)
を使用して、文字列の幅をptで取得できます。
または、文字列をチャンクに入れてchunk.getWidthPoint()
を実行します
受け入れられた回答_BaseFont.getWidthPoint
_は、メソッドが静的ではなくなったため、itex5.5.4では機能しません。まだ存在していても、静的で限られたパラメーターを受け取るため、使用されている実際のフォント(そのファミリーまたは太字/斜体)は考慮されません。
chunk.getWidthPoint()
は、後で説明するようにTrue Fontで機能しますが、特定の用途では、特にチャンクを後で使用する予定がない場合は、幅だけのチャンクを常に作成するのは無駄です。
これは、水平スケーリングを行っていないことを前提として、スタンドアロンの代替として使用するchunk.getWidthPoint()
の基礎となるコードです。
_font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
_
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
);