【问题标题】:Postioning JFreeChart Image with Itext 5使用 Itext 5 定位 JFreeChart 图像
【发布时间】:2017-12-01 14:23:17
【问题描述】:

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

【问题讨论】:

    标签: java image itext jfreechart


    【解决方案1】:

    您为直接页面内容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);
    

    显然你应该只添加一次。

    【讨论】:

    • 谢谢。就是这样。双重加法是尝试不同的方法使其移动的结果。我更改了 OP 以显示更正后的代码。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多