使用 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);
显然你应该添加一次。
我创建了一个 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);
显然你应该添加一次。