我使用下面的代码在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);
期望的输出:
答案 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