如何适合矩形内的一个string?

我想添加一些string,图像和表格到我的PDF文件(必须有几个页面),但是当我尝试使用ColumnText (我使用这个,因为我想把string放在绝对位置),我遇到一个问题。 当列高不足以添加string的内容时,内容不完整。 我怎样才能避免这些内容丢失?

这是相关的代码:

 try { PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); PdfContentByte cb = writer.getDirectContent(); String imageUrl = "/Users/nofear/workspace/deneme23/pics/a4-ust.png"; String imageUrlAlt = "pics/a4-alt.png"; Image imageust = null; Image imageAlt = null; try { imageust = Image.getInstance(imageUrl); imageAlt = Image.getInstance(imageUrlAlt); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("HEIGHT" + (document.getPageSize().getHeight() - imageust.getHeight())); imageust.setAbsolutePosition(0f, document.getPageSize().getHeight() - imageust.getHeight()-10); imageAlt.setAbsolutePosition( 0f, 10f); document.add(imageust); document.add(imageAlt); // now draw a line below the headline cb.setLineWidth(1f); cb.moveTo(0, 200); cb.lineTo(200, 200); cb.stroke(); // first define a standard font for our text Font helvetica8BoldBlue = FontFactory.getFont(FontFactory.HELVETICA,16); // create a column object ColumnText ct = new ColumnText(cb); // define the text to print in the column Phrase myText = new Phrase("Very Very Long String!!!" , helvetica8BoldBlue); ct.setSimpleColumn(myText, 60, 750, /* width*/document.getPageSize().getWidth() - 40, 100, 20, Element.ALIGN_LEFT); ct.go(); } catch (Exception e) { } finally { document.close(); } 

有三个选项:

  1. 要么提供一个更大的矩形,以便内容适合内部,
  2. 或者你减less的内容(如较小的字体,较less的文字),…
  3. 保持矩形的大小,保持字体大小等等,但添加不适合下一页的内容。

你怎么知道内容不适合?

您可以先在模拟模式下添加内容,然后testing所有内容是否“消耗”:

 int status = ct.go(true); boolean fits = !ColumnText.hasMoreText(status); 

基于fits的值,您可以决定更改矩形或内容的大小。 有一个示例显示了如何执行此操作: http : //itextpdf.com/examples/iia.php?id=163

如果你可以通过不同的页面分发内容,你不需要模拟模式,你只需要插入一个document.newPage();

 ColumnText ct = new ColumnText(cb); ct.setSimpleColumn(rect); int status = ct.go(); while (ColumnText.hasMoreText(status)) { document.newPage(); ct.setSimpleColumn(rect); status = ct.go(); } 

在这个例子中, rect包含矩形的坐标。