Добавить BufferedImage к документу PDFBox - PullRequest
8 голосов
/ 14 августа 2011

В моем текущем проекте я пытаюсь добавить 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 ]

7 голосов
/ 15 августа 2011

Спасибо, что помогли мне, мусорщик. Потратил прошлую ночь и несколько часов сегодня, будучи запутанным о 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();
}

Я уверен, что это можно сделать лучше, но это работает.

5 голосов
/ 05 октября 2012

Существует простой способ вставить JFreeChart в pdf с помощью pdfbox:

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

без потока;)

3 голосов
/ 14 августа 2011

Две вещи выделяются:

  • Не глотать исключения.

  • Используйте ChartUtilities для рендеринга изображения в подходящем формате, как предлагается здесь .

...