当前位置: 首页 > 面试题库 >

将BufferedImage添加到PDFBox文档

叶俊郎
2023-03-14
问题内容

在我当前的项目中,我尝试将一个添加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();
}

文档被创建;我可以添加文本,但是出现错误,指出图像没有足够的信息可显示。

任何有关我做错事情的线索?


问题答案:

感谢您帮助我解决垃圾问题。昨晚和今天花了几个小时,人们对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();
}

我敢肯定,这样做可以做得更好,但是可以。



 类似资料:
  • 主要内容:将文本添加到现有的PDF文档,示例在前一章中,我们讨论了如何将页面添加到PDF文档。 在本章中,我们将讨论如何将文本添加到现有的PDF文档。 将文本添加到现有的PDF文档 可以使用PDFBox库将内容添加到文档,它提供一个名称为的类,其中包含在的页面中插入文本,图像和其他类型内容所需的方法。 以下是创建空白文档并将内容添加到其中的页面的步骤。 第1步:加载现有文档 使用类的方法加载现有文档。 因此,请实例化此类并加载所需的文档,如

  • 问题内容: 我正在使用Apache PDFBox(http://pdfbox.apache.org/)从任意数量的文件(包括图像和其他PDF)中创建PDF。现在,我需要将MS Office文档(Word,Excel和Outlook MSG)添加到PDF。这些文件几乎可以具有每个Office版本,因此不能认为该文件是新的Office文件(例如docx)还是旧的办公室文件(例如doc)。 有什么办法只

  • 我正在使用Apache PDFBox(http://PDFBox.Apache.org/)从任意数量的文件(包括图像和其他PDF)中创建PDF。现在我需要将MS Office文档(Word、Excel和Outlook MSGs)添加到PDF中。这些文件几乎可以有每一个Office版本,因此不允许该文件是新的Office文件(例如docx)还是旧的Office文件(例如doc)。 有没有办法只使用免

  • 主要内容:示例在前一章中提供的示例中,学习了如何在PDF中向页面添加文本,但通过此程序,只能添加适合单行的文本。 如果您尝试添加更多内容,则不会显示超出行间距的所有文字。 例如,如果传递以下字符串在上一章中执行上述程序,则只会显示其中的一部分。 用上面提到的字符串替换上一章中例子的字符串文本并执行它。 执行后,将得到类似以下输出。 如果仔细观察输出,可以看到只显示了一部分字符串。 要将多行添加到PDF,需要使用

  • 我需要在JPanel中显示一个图像,但是这个图像需要在我的项目路径中的一个相对文件夹(我的res文件夹)中,这样我的程序就可以在任何机器上工作,并且图像总是可用的。到目前为止,我的代码是:

  • 我使用以下方法在easytable(easytable)中创建我的表头 然后,绘制表格: 表格标题绘制正确,但。。动态添加行的方法是什么?我必须画一张新桌子吗?我可以向已经创建的表中添加行吗? 谢谢