使用Itext 5放置JFreeChart图像

时间:2017-12-01 14:23:17

标签: java image itext jfreechart

我创建了一个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。

1 个答案:

答案 0 :(得分:2)

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

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

因此,图表会直接绘制到cb,而您对tp的处理根本不重要!

因此,您应该使用模板PdfGraphics2D初始化tp

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);

显然你应该添加它一次。