我试图在我的pdf文件中添加一些字符串,图像和表格(必须有几页)但是当我尝试使用ColumnText
时(我使用它因为我想放置字符串)在绝对位置),我遇到了一个问题。
当列高度不足以添加字符串的内容时,内容不完整。如何避免内容丢失?
以下是相关代码:
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();
}
答案 0 :(得分:2)
有三种选择:
您如何知道内容是否适合?
您可以先在模拟模式下添加内容,然后测试所有内容是否已“消耗”:
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
包含矩形的坐标。