gpt4 book ai didi

java - 使用 PDFBox 将图像转换为 PDF 文件

转载 作者:行者123 更新时间:2023-11-30 10:24:07 24 4
gpt4 key购买 nike

我想将一些图像转换为 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);
}
}

最佳答案

new PDStream(doc)

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

你想做的很简单

doc.save(baos);

关于java - 使用 PDFBox 将图像转换为 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com