1

以下のコードを使用して pdf で文字列を印刷すると、同じサイズの文字列が出力されます。最後の 2 つの文字列を異なるフォント サイズで作成したいと考えています。これどうやってするの ?

PdfContentByte cb = writer.getDirectContent();

    String stl = "", stl1 = (String) request.getParameter("x0");//                        (String)val.get(0);
        int ln = stl1.length();
        String new1 ="" ;
        if (ln > 1)
        {
            for (int ii = 0; ii < ln - 2; ii++)
                stl = stl + stl1.charAt(ii);
            stl = stl + " . ";
            stl1 = stl1.substring(ln - 2, ln);
            new1 = stl + stl1;
            //stl1 = stl + stl1;

        }
        cb.setFontAndSize(bf, 18); 
        cb.setTextRenderingMode(2);
        //cb.showTextAligned(PdfContentByte.ALIGN_LEFT, stl1, 20 + x, 663 + y, 0);
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT, new1, 20 + x, 663 + y, 0);

望ましい出力:

ここに画像の説明を入力

4

2 に答える 2

1

これを行う最善の方法は、最後の 2 桁を含む最初の文字列の後に別の文字列を出力することです。

コード例:

1)これに置き換えString new1 ="" ;ます:

String textLarge ="" ;
String textSmall ="" ;

2) 以下に置き換えnew1 = stl + stl1;ます。

textLarge = stl;
textSmall = stl1;

3) 大きなテキストと小さなテキストを別々に印刷するようにコードを変更します。

cb.setFontAndSize(bf, 18);        
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, textLarge, 20 + x, 663 + y, 0);
cb.setFontAndSize(bf, 14);        
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, textSmall, 20 + ? + x, 663 + y, 0);

「?」を置き換えます。上の行に大きなテキストの印刷幅があります。itext を使用しているように見えるので、次のいずれかを使用できます BaseFont.getWidthPoint(String text, float fontSize)。文字列の幅を pt で取得します。または、文字列をチャンクに入れて実行しますchunk.getWidthPoint()

于 2012-08-28T00:16:24.863 に答える
0

前の答えは正しいですが、それを行う別の方法もあります。テキストを絶対座標に配置する場合は、ColumnText クラスも使用できます。たとえば、これまで使用してきたものと同様の静的メソッド showTextAligned() を使用できます。ColumnText メソッドの利点は、Phrase オブジェクトを受け入れることです。Phrase オブジェクトは異なる Chunk オブジェクトで構成でき、各 Chunk は異なるサイズの異なるフォントを使用できます。前の回答とこの回答を示す例については、http://itextpdf.com/examples/iia.php?id=62を参照してください。

于 2012-08-28T14:06:29.780 に答える