使用 Itext 5 定位 JFreeChart 图像

Postioning JFreeChart Image with Itext 5

我创建了一个 JFreeChart 图像,但在定位它时遇到问题。图片左下角放在页面左下角。

Rectangle page=writer.getPageSize();
// swap X and Y for Landscape dimensions
float sizeX=page.getHeight();
float sizeY=page.getWidth();
float scale=.7f;
float marginY=10.f;
float marginX=50.f;
PdfContentByte cb=writer.getDirectContent();
PdfTemplate tp=cb.createTemplate(sizeX*scale+1,sizeY*scale+1);
PdfGraphics2D g2d=new PdfGraphics2D(tp,sizeX*scale+1,sizeY*scale+1);
tp.setWidth(sizeX*scale+1);
tp.setHeight(sizeY*scale+1);
Chart.getInstance().getChart().draw(g2d, new java.awt.geom.Rectangle2D.Float(0,0,sizeX*scale,sizeY*scale));
g2d.dispose();
Image image=Image.getInstance(tp);
image.setAbsolutePosition(marginX, sizeY-350.f);
document.add(image);

我想将图像的左上角放在当前光标位置。我究竟做错了什么? TIA.

您为直接页面内容 cb 创建了 PdfGraphics2D,而不是模板 tp:

PdfGraphics2D g2d=new PdfGraphics2D(cb,sizeX*scale+1,sizeY*scale+1);

因此,图表直接绘制到cb中,您对tp的处理根本没有关系!

因此,您应该使用模板 tp:

初始化 PdfGraphics2D
PdfGraphics2D g2d=new PdfGraphics2D(tp,sizeX*scale+1,sizeY*scale+1);

此外,您将 tp 添加到页面两次,第一次添加到其直接内容

cb.add(tp);

然后包裹在一个 Image 实例到它的 Document document.

Image image=Image.getInstance(tp);
image.setAbsolutePosition(marginX, sizeY-marginY);
document.add(image);

显然你应该添加一次。