Add BufferedImage to PDFBox document
Solution 1
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.
Solution 2
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 ;)
Solution 3
Two things stand out:
Do not swallow exceptions.
Do use
ChartUtilities
to render the image in a suitable format, as suggested here.
Related videos on Youtube
Oglop
Updated on June 08, 2022Comments
-
Oglop almost 2 years
In my current project, I try to add a
BufferedImage
to a PDFBox document. More specificly, I use an image from aJFreeChart
. My code looks like this: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(); }
The document gets created; I can add text, but I get an error stating the the image does not have enough information to be shown.
Any clue to what I am doing wrong?
-
Oglop over 11 yearsThis seems to be what I was looking for back then. Great!