Itext 使用ColumnText会导致出现“;文件没有页数”;例外
我想将文本包装在图像下方(或左侧或右侧)的矩形中,如下所示: 请参阅链接: 我在代码中使用ColumnText包装文本:Itext 使用ColumnText会导致出现“;文件没有页数”;例外,itext,Itext,我想将文本包装在图像下方(或左侧或右侧)的矩形中,如下所示: 请参阅链接: 我在代码中使用ColumnText包装文本: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/pdf"); try { // st
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/pdf");
try {
// step 1
Document document = new Document(PageSize.A4.rotate());
// step 2
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, baos);
// step 3
document.open();
// step 4
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(new Phrase("text is very long ..."), 10, 10, 20, 20, 18, Element.ALIGN_CENTER);
column.go();
// step 5
document.close();
ServletOutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();
} catch (DocumentException e) {
throw new IOException(e.getMessage());
}
}
结果:
ExceptionConverter:java.io.IOException:文档没有页面
你对如何解决这个问题有什么建议吗
问题2
我尝试用下面的代码在矩形中显示文本(中间和中间),但没有成功。文本仅在矩形中居中
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(RectImg1[0], RectImg1[1], RectImg1[0] + squareHeight, RectImg1[1] + squareHeight
* 1 / 4);
Paragraph p = new Paragraph(imgr.getText(), fontH);
p.setAlignment(Element.ALIGN_CENTER | Element.ALIGN_MIDDLE);
p.setLeading(18);
column.addElement(p);
column.go();
我的错误在哪里?我编辑了您问题的标题,因为它具有误导性:您遇到的异常也将发生在独立应用程序中。在Servlet中使用代码这一事实与此无关 我看到你有以下几行:
column.go();
您没有使用这样的内容:
int status = column.go();
column.setSimpleColumn(new Phrase("text is very long ..."), 36, 36, 559, 806, 18, Element.ALIGN_CENTER);
如果您这样做了,并且检查了状态
,您会注意到列
对象仍然包含一些文本
什么文本?所有文本
这一行有一个严重错误:
column.setSimpleColumn(new Phrase("text is very long ..."), 10, 10, 20, 20, 18, Element.ALIGN_CENTER);
您正在尝试将文本“文本很长…”
添加到具有以下坐标的矩形中:
float llx = 10;
float lly = 10;
float urx = 20;
float ury = 20;
您没有定义字体,因此字体为Helvetica,字体大小为12pt,您定义的前导为18pt
这意味着您正试图将12磅高的文本与额外6磅的前导匹配到一个10×10磅的正方形中。你当然明白这是行不通的
因此,PDF中没有添加任何内容,iText不会显示空页面,而是抛出一个异常,说:没有页面!您没有向文档中添加任何内容
例如,您可以通过将不正确的行更改为以下内容来解决此问题:
int status = column.go();
column.setSimpleColumn(new Phrase("text is very long ..."), 36, 36, 559, 806, 18, Element.ALIGN_CENTER);
另一种选择是:
column.setSimpleColumn(rect);
column.addElement(paragraph);
在这两行中,
rect
是一个Rectangle
对象。前导和对齐将在段落
对象级别定义(在本例中,您不使用短语
)。这非常有用。谢谢布鲁诺·洛瓦吉!!但是,我想将文本包装到一个rect中,然后如何操作?使用坐标llx
、lly
、urx
和ury
定义rectll
表示左下角ur
表示右上角。这两个角定义了矩形。我还用另一种方法更新了我的问题。我还在google.com上搜索,并在链接“”中找到了这个主题。但文本在矩形中不居中,如示例图像:“”。你能给我一些建议吗?是的,你必须结合垂直居中文本的例子和水平居中文本的代码。我想水平居中和垂直居中的区别让我们困惑;-):(如果我使用VerticalText如下:VerticalText vt=new VerticalText(writer.getDirectContent());vt.setVerticalLayout(marginLeft+squareHeight,1191.0f-marginTop,squareHeight,3,20);vt.setAlignment(Element.ALIGN_CENTER);段落p=新段落(imgr.getText(),fontV);p.setLeading(10);vt.addText(p);vt.go();文本向右对齐。如何在垂直文本中显示文本中心?