使用 PDFBox 将图像转换为 PDF 文件
Convert images to PDF file using PDFBox
我想将一些图像转换为 PDDocument
对象,而不是保存到硬件。如何从此 PDDocument
对象获取输入流?
我写如下,得到“Create InputStream called without data being written before to stream”。错误。
来源部分为:
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
。它实际上做的是创建属于文档 doc
.
的 PDF 流对象
你想做的只是
doc.save(baos);
我想将一些图像转换为 PDDocument
对象,而不是保存到硬件。如何从此 PDDocument
对象获取输入流?
我写如下,得到“Create InputStream called without data being written before to stream”。错误。
来源部分为:
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
。它实际上做的是创建属于文档 doc
.
你想做的只是
doc.save(baos);