Добавить BufferedImage в PDFBox документа

голоса
8

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

Документ будет создаваться; Я могу добавить текст, но я получаю сообщение об ошибке с указанием изображения не имеет достаточно информации, чтобы показать.

Любой ключ к тому, что я делаю неправильно?

Задан 14/08/2011 в 07:51
источник пользователем
На других языках...                            


3 ответов

голоса
7

Спасибо за помощь мне trashgod. Провел сегодня несколько часов прошлой ночью, и неоспоримый путать о PipedIn / OutStreams. Не могу понять это. Тем не менее, я получил его на работу. Оказывается, это wasn't очень трудно.

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

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

Ответил 15/08/2011 в 17:20
источник пользователем

голоса
5

Существует простой способ, чтобы вставить JFreeChart в PDF с pdfbox:

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

Без какого-либо потока;)

Ответил 05/10/2012 в 10:03
источник пользователем

голоса
3

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

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

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

Ответил 14/08/2011 в 13:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more