iText:PdfContentByte。矩形(矩形)的行为与预期不符
我正在使用iText2.1.7,并试图在文档中绘制一个简单的矩形。下面的代码块按预期工作,并绘制一个覆盖整个页面(不包括页面边距)的矩形iText:PdfContentByte。矩形(矩形)的行为与预期不符,itext,Itext,我正在使用iText2.1.7,并试图在文档中绘制一个简单的矩形。下面的代码块按预期工作,并绘制一个覆盖整个页面(不包括页面边距)的矩形 Document Document=新文档(PageSize.A4.rotate()); PdfWriter writer=PdfWriter.getInstance(文档,outputStream); document.open(); PdfContentByte canvas=writer.getDirectContent(); 矩形pageDimensi
Document Document=新文档(PageSize.A4.rotate());
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
document.open();
PdfContentByte canvas=writer.getDirectContent();
矩形pageDimensions=writer.getPageSize();
canvas.saveState();
画布矩形(
pageDimensions.getLeft(边缘左侧),
pageDimensions.getBottom(marginBottom),
pageDimensions.getRight(边缘右侧),
pageDimensions.getTop(marginTop));
canvas.setColorStroke(颜色:黑色);
canvas.stroke();
canvas.restoreState();
document.close();
但是,如果我稍微更改画布代码块,以便在PdfContentByte之外定义矩形,那么我的代码将生成一个空白页面
。。。
矩形marginBox=新矩形(
pageDimensions.getLeft(边缘左侧),
pageDimensions.getBottom(marginBottom),
pageDimensions.getRight(边缘右侧),
pageDimensions.getTop(marginTop));
canvas.saveState();
canvas.长方形(marginBox);
canvas.setColorStroke(颜色:黑色);
canvas.stroke();
canvas.restoreState();
...
这不是
PdfContentByte.rectangle(rectangle)
方法的预期用途吗??理想情况下,我希望以一种不与directContent紧密耦合的方式定义矩形(以及它们的边框颜色和宽度),并且可以在以后自由地将它们添加到directContent中 首先,我觉得有必要说,您使用的是不应该再使用的iText版本。有关更多信息,请参阅
至于你的问题,你所做的一些假设是错误的。例如:当您使用Rectangle
对象时,使用stroke()
操作符是没有意义的,因为Rectangle()
方法将Rectangle
作为参数来绘制路径(与采用4个float
值的方法相反)
如果没有为矩形
定义边框和边框宽度,则采用矩形的rectangle()
方法将不会执行任何操作。换句话说,你需要这样的东西:
Rectangle rect = new Rectangle(36, 36, 559, 806);
rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(2);
canvas.rectangle(rect);
如果没有定义边界,或者边界的宽度大于0,则假定没有边界。谢谢您,Lowagie先生,非常感谢您抽出时间回答我的问题。即rect.sebtorder(Rectangle.BOX)代码>行是我试图使其工作的所有内容中缺少的组件。
Rectangle rect = new Rectangle(36, 36, 559, 806);
rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(2);
canvas.rectangle(rect);