Add BufferedImage to PDFBox document

后端 未结 3 532
生来不讨喜
生来不讨喜 2020-12-14 23:59

In my current project, I try to add a BufferedImage to a PDFBox document. More specificly, I use an image from a JFreeChart. My code looks like thi

相关标签:
3条回答
  • 2020-12-15 00:24

    Thanks for helping me out trashgod. Spent last night and a few hours today beeing confused about PipedIn/OutStreams. Can´t figure it out. However, i got it to work. Turns out it wasn´t very difficult at all.

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

    I´m sure this can be done better but it works.

    0 讨论(0)
  • 2020-12-15 00:27

    Two things stand out:

    • Do not swallow exceptions.

    • Do use ChartUtilities to render the image in a suitable format, as suggested here.

    0 讨论(0)
  • 2020-12-15 00:34

    There is an easy way to insert a JFreeChart into a pdf with pdfbox:

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

    Without any stream ;)

    0 讨论(0)
提交回复
热议问题