【问题标题】:Convert images to PDF file using PDFBox使用 PDFBox 将图像转换为 PDF 文件
【发布时间】:2018-03-22 15:17:12
【问题描述】:

我想将一些图像转换为PDDocument 对象,而不是保存到硬件。如何从此PDDocument 对象获取输入流?

我写如下,得到“调用创建 InputStream 之前没有将数据写入流。”错误。

来源部分是:

public ByteArrayOutputStream imagesToPdf(final List<ImageEntity> images) throws IOException {
    final PDDocument doc = new PDDocument();
    
    final int count = images.size();
    InputStream in = null;
    PDPageContentStream contentStream = null;
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        for (int i = 0; i < count; i ++) {
            final ImageEntity image = images.get(i);
            byte[] byteCode = image.getByteCode();

            in = new ByteArrayInputStream(byteCode);
            BufferedImage bi = ImageIO.read(in);

            float width = bi.getWidth();
            float height = bi.getHeight();
            PDPage page = new PDPage(new PDRectangle(width, height));
            doc.addPage(page); 

            PDImageXObject pdImage = PDImageXObject.createFromByteArray(doc, byteCode, null);
            contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true);
            
            float scale = 1f;
            contentStream.drawImage(pdImage, 0, 0, pdImage.getWidth()*scale, pdImage.getHeight()*scale);
            
            IOUtils.closeQuietly(contentStream);
            IOUtils.closeQuietly(in);
        }

        PDStream ps = new PDStream(doc);
        is = ps.createInputStream();
        IOUtils.copy(is, baos);

        return baos;
    } finally {
        IOUtils.closeQuietly(contentStream);
        IOUtils.closeQuietly(in);
    }
}

【问题讨论】:

  • 无需物理存储即可将多个图像转换为单个 pdf 的好主意。太棒了。

标签: java pdf-generation pdfbox


【解决方案1】:
new PDStream(doc)

不会创建一个对象,您可以从该对象中以序列化形式检索doc,如您所假设的那样。它实际上所做的是创建一个 PDF 流对象属于文档doc

你想做的很简单

doc.save(baos);

【讨论】:

  • @user1737352 太好了!在这种情况下,请将答案标记为已接受(单击左上角的勾号)。
  • 对不起,我不能点击左上角的三角符号,因为我的声望低于15。
  • 在两个三角形下面应该有一个刻度符号,您可以将其切换为灰色或绿色。勾号用于接受,三角形用于向上或向下投票。作为提出问题的人,无论您的声誉如何,您都应该可以接受。
  • 太棒了。您给出了很好的简单而正确的想法。
猜你喜欢
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多