Rest 使用PDFBox将字节[]打印为PDF
我有一个关于使用PDFBox将图像写入PDF的问题 我的要求非常简单:我使用SpringRest 使用PDFBox将字节[]打印为PDF,rest,spring-mvc,pdfbox,Rest,Spring Mvc,Pdfbox,我有一个关于使用PDFBox将图像写入PDF的问题 我的要求非常简单:我使用SpringRestTemplate从web服务获取图像,我将其存储在byte[]变量中,但我需要将图像绘制到PDF文档中 我知道提供了以下内容: final byte[] image = this.restTemplate.getForObject( this.imagesUrl + cableReference + this.format, byte[].class ); JPEGF
RestTemplate
从web服务获取图像,我将其存储在byte[]
变量中,但我需要将图像绘制到PDF文档中
我知道提供了以下内容:
final byte[] image = this.restTemplate.getForObject(
this.imagesUrl + cableReference + this.format,
byte[].class
);
JPEGFactory.createFromStream()
对于JPEG格式,对于TIFF图像,CCITTFactory.createFromFile()
对于无损工厂.createFromImage()如果从缓冲图像开始。但我不知道该用什么,因为我知道的关于这些图像的唯一信息是它们是缩略图格式,我不知道如何从byte[]
转换为这些格式
非常感谢您的帮助。(这适用于2.0版,而不是1.8版)
我不知道缩略图格式是什么意思,但请尝试一下:
final byte[] image = ... // your code
ByteArrayInputStream bais = new ByteArrayInputStream(image);
BufferedImage bim = ImageIO.read(bais);
PDImageXObject pdImage = LosslessFactory.createFromImage(doc, bim);
可以通过使用创建更高级的解决方案
PDImageXObject.createFromFileByContent()
但是这一个使用文件而不是流,因此速度会慢一些(但会产生最好的图像类型)
要将此图像添加到PDF中,请使用以下代码:
PDDocument doc = new PDDocument();
try
{
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream contents = new PDPageContentStream(doc, page);
// draw the image at full size at (x=20, y=20)
contents.drawImage(pdImage, 20, 20);
// to draw the image at half size at (x=20, y=20) use
// contents.drawImage(pdImage, 20, 20, pdImage.getWidth() / 2, pdImage.getHeight() / 2);
contents.close();
doc.save(pdfPath);
}
finally
{
doc.close();
}
感谢您的回答,实际上是在测试了javax.imageio.IIOException之后:在这一行抛出了不支持的图像类型:buffereImage bim=imageio.read(bais)@saadoune能否将图像字节数组保存到文件中?FileOutputStream fos=新的FileOutputStream(新文件(..);写入(数组);fos.close();然后在按下“I”(我喜欢信息)时用IrfanView打开该文件。它是什么类型的?打开图像时,会显示一条警告,说明它是一个扩展名不正确的JPG文件,但在帮助中会显示“压缩:JPEG,CMYK,质量:100,子采样关闭”。谢谢。哎哟,CMYK JPEG确实是java ImageIO的一个问题。您可以尝试使用,即将JPEG库放在您的类路径中。您好,感谢您的帮助和指示,我现在已将twelvemokeyproject添加到我的工作区,并将图像JPEG作为依赖项,无论如何,我应该如何使用他的包中的(读/写)方法。再次感谢。