以pdf格式打印小字体的子字符串

时间:2012-08-27 09:20:56

标签: java string string-concatenation pdf-writer

我使用下面的代码在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);

期望的输出:

enter image description here

2 个答案:

答案 0 :(得分: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);

替换&#34;?&#34;在上面的行中,打印宽度为大文本。 看起来你正在使用itext,所以你可以使用: BaseFont.getWidthPoint(String text, float fontSize)获取pt中字符串的宽度。 或者将字符串放入Chunk并执行chunk.getWidthPoint()

答案 1 :(得分:0)

之前的答案是正确的,但也有另一种方法可以做到这一点。 如果要将文本放在绝对坐标上,还可以使用ColumnText类。 例如:您可以使用与您目前使用的类似的静态方法showTextAligned()。 ColumnText方法的优点是它接受Phrase对象。 Phrase对象可以包含不同的Chunk对象,每个Chunk可以使用不同大小的不同字体。 有关演示上一个答案以及此答案的示例,请参阅http://itextpdf.com/examples/iia.php?id=62