2012-08-27 59 views
1

我使用下面的代碼打印PDF格式的字符串,它給了我輸出相同大小的字符串,我想使最後兩個字符串的字體大小不同。我怎樣才能做到這一點 ?以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

回答

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()

0

上一個答案是正確的,但也有其他方法可以做到這一點。 如果你想在絕對座標上定位文本,你也可以使用ColumnText類。例如:您可以使用靜態方法showTextAligned(),它與您目前使用的類似。 ColumnText方法的優點是它接受Phrase對象。短語對象可以由不同的塊對象組成,每個塊可以使用不同大小的不同字體。 舉例說明以前的答案以及本例,請參閱http://itextpdf.com/examples/iia.php?id=62