iText を使用して PDF を作成しています。場合によっては、SetVisibleSignature
関数で PDF に署名する必要があります。この関数では、コンテンツを書き込む長方形を指定する必要があります。
しかし、文字列の幅を計算するのは難しいので、PDF に署名を設定する前に四角形を設定できます。
iTextで文字列の幅を計算するにはどうすればよいですか?
iText を使用して PDF を作成しています。場合によっては、SetVisibleSignature
関数で PDF に署名する必要があります。この関数では、コンテンツを書き込む長方形を指定する必要があります。
しかし、文字列の幅を計算するのは難しいので、PDF に署名を設定する前に四角形を設定できます。
iTextで文字列の幅を計算するにはどうすればよいですか?
BaseFont.getWidthPoint(String text, float fontSize)
ptで文字列の幅を取得するために使用できます。
または、文字列をチャンクに入れて実行しますchunk.getWidthPoint()
メソッドが静的ではないため、受け入れられた答えBaseFont.getWidthPoint
は itext 5.5.4 では機能しません。まだ存在していたとしても、使用されている真のフォント (そのファミリまたは太字/斜体) は考慮されません。これは静的であり、限られたパラメーターを受け取るためです。
chunk.getWidthPoint()
後で述べるように真のフォントで動作しますが、特定の用途では、特にチャンクが後で使用される予定がない場合、幅のためだけにチャンクを常に作成するのは無駄です。
chunk.getWidthPoint()
これは、水平方向のスケーリングを行わないと仮定して、スタンドアロンの代替として使用するための基本的なコードです。
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
I ended up doing this with ColumnText.getWidth( Phrase phrase )
to size what the width of a Phrase
would be before showing it with ColumnText.showTextAligned
.
In this snippet, I used the ColumnText.getWidth
to size the length of a string to place it top right of a page. It works in portrait A4, haven't tested it further.
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
);