1

我使用下面的代码在 pdf 中打印一个字符串,这给了我一个相同大小的字符串,我想用不同的字体大小制作最后两个字符串。我怎样才能做到这一点 ?

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 中并执行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 回答