将BufferedImage添加到PDFBox文档

时间:2011-08-14 06:51:46

标签: java jfreechart bufferedimage pdfbox

在我当前的项目中,我尝试将BufferedImage添加到PDFBox文档中。更具体地说,我使用JFreeChart中的图像。我的代码如下所示:

public void exportToPDF(JFreeChart chart, String filePath){
    PDDocument doc = null;
    PDPage page = null;
    PDXObjectImage ximage = null;

    try {
        doc = new PDDocument();
        page = new PDPage();
        doc.addPage(page);
        PDPageContentStream content = new PDPageContentStream(doc, page);
        BufferedImage image = chart.createBufferedImage(300, 300);
        ximage = new PDJpeg(doc, image);
        content.drawImage(ximage, 20, 20);
        content.close();
    } catch(IOException ie) {
    }
    doc.save(filePath);
    doc.close();
}

创建文档;我可以添加文字,但是我收到错误,说明图片没有足够的信息显示。

我做错了什么线索?

3 个答案:

答案 0 :(得分:7)

感谢您帮我解决问题。昨天晚上花了几个小时,今天花了很多关于PipedIn / OutStreams的事情。无法弄清楚。但是,我得到了它的工作。事实证明这并不困难。

public void exportToPDF(JFreeChart chart, String filePath){
    PDDocument doc = null;
    PDPage page = null;
    PDXObjectImage ximage = null;
    try {
        doc = new PDDocument();
        page = new PDPage();
        doc.addPage(page);
        PDPageContentStream content = new PDPageContentStream(doc, page);

        //create a new outStream
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ChartUtilities.writeChartAsJPEG(out, chart, 300, 300);//write to outstream
        //create a new inputstream
        InputStream in = new ByteArrayInputStream(out.toByteArray());
        ximage = new PDJpeg(doc, in);
        content.drawImage(ximage, 5, 300);
        content.close();
    }
    catch (IOException ie){
        //handle exception
    }
    //save and close
    doc.save(filePath);
    doc.close();
}

我确信这可以做得更好但是有效。

答案 1 :(得分:5)

使用pdfbox将JFreeChart插入pdf有一种简单的方法:

BufferedImage bufferedImage = source.getChart().createBufferedImage(source.getWidth(),
        source.getHeight(), BufferedImage.TYPE_INT_RGB, null);
PDXObjectImage ximage = new PDJpeg(doc, bufferedImage);

没有任何流;)

答案 2 :(得分:3)

有两件事突出:

  • 不要吞下例外情况。

  • 使用ChartUtilities以合适的格式呈现图片,如建议的here