9

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

ドキュメントが作成されます。テキストを追加できますが、表示するのに十分な情報が画像にないというエラーが表示されます。

私が間違っていることの手がかりはありますか?

4

3 に答える 3

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

これはもっとうまくできると確信していますが、うまくいきます。

于 2011-08-15T16:20:21.517 に答える
5

pdfbox を使用して JFreeChart を pdf に挿入する簡単な方法があります。

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

ストリームなし;)

于 2012-10-05T09:03:31.773 に答える
3

次の 2 つの点が際立っています。

  • 例外を飲み込まないでください。

  • ここでChartUtilities提案されているように、適切な形式で画像をレンダリングするために使用してください。

于 2011-08-14T12:43:00.923 に答える