使用pdfbox打印byte []到pdf

时间:2016-03-02 15:15:20

标签: rest spring-mvc pdfbox

我有一个关于使用pdfbox将图像写入pdf的问题。我的要求非常简单,我使用spring restTemplate从Web服务获取图像:我将它存储在byte []变量中,但我需要将图像绘制成pdf文档。我知道提供了以下内容:

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

JPEGFactory.createFromStream ,TIFF图片的 CCITTFactory.createFromFil LosslessFactory.createFromImage 如果以缓冲的图片开头但我不# 39;知道要使用什么,因为我知道的唯一信息就是图像是(THUMBNAIL格式),我不知道如何从byte []转换为那些格式。非常感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:3)

(这适用于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();
    }