【问题标题】:Print byte[] to PDF using PDFBox使用 PDFBox 将字节 [] 打印到 PDF
【发布时间】:2016-06-15 12:54:33
【问题描述】:

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

我的要求很简单:我使用 Spring RestTemplate 从 Web 服务获取图像,我将其存储在 byte[] 变量中,但我需要将图像绘制到 PDF 文档中。

我知道提供了以下内容:

final byte[] image = this.restTemplate.getForObject(
        this.imagesUrl + cableReference + this.format,
        byte[].class
);

JPEGFactory.createFromStream() 用于 JPEG 格式,CCITTFactory.createFromFile() 用于 TIFF 图像,LosslessFactory.createFromImage() 如果从缓冲图像开始。但我不知道该使用什么,因为我所知道的关于这些图像的唯一信息是它们是 THUMBNAIL 格式,我不知道如何从 byte[] 转换为这些格式。

非常感谢您的帮助。

【问题讨论】:

    标签: rest spring-mvc pdfbox


    【解决方案1】:

    (适用于 2.0 版,不适用于 1.8)

    我不知道您对 THUMBNAIL 格式是什么意思,但请尝试一下:

        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: Unsupported Image Type is throwed at this line 之后:BufferedImage bim = ImageIO.read(bais);
    • @saadoune 你能将图像字节数组保存到文件中吗? FileOutputStream fos = new FileOutputStream(new File(....)); fos.write(数组); fos.close();然后按“I”(我喜欢信息)时使用 IrfanView 打开该文件。它是什么类型的?
    • 打开图像时会显示一条警告,指出它是扩展名不正确的 JPG 文件,但在帮助中显示“压缩:JPEG,CMYK,质量:100,子采样关闭”。谢谢。
    • 哎呀,CMYK Jpegs 确实是 java ImageIO 的问题。您可以尝试使用 github.com/haraldk/TwelveMonkeys ,即将 JPEG 的库放在您的类路径中。
    • 您好,感谢您的帮助和指示,我现在已经在我的工作区中添加了十二模键项目,并将 image-jpeg 作为依赖项,无论如何,我应该如何使用他的(读/写)方法包。再次感谢。
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2021-06-12
    • 2019-07-08
    • 1970-01-01
    • 2017-07-15
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多