Rest 使用PDFBox将字节[]打印为PDF

Rest 使用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

我有一个关于使用PDFBox将图像写入PDF的问题

我的要求非常简单:我使用Spring
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作为依赖项,无论如何,我应该如何使用他的包中的(读/写)方法。再次感谢。