使用PDFBox将图像转换为byte []

时间:2016-04-19 20:28:02

标签: java pdf pdfbox

我正在使用PDFBox 2.0。在解析PDF文档时,我还希望将第一页作为图像存储并存储到hbase,以便在搜索结果中使用它(我将创建一个搜索列表页面,如amazon.com的搜索页面)。

HBase接受byte []变量来存储(索引)一个值。我需要将图像转换为byte [],然后将其存储到HBase。我已经实现了图像渲染,但是如何将其转换为byte []?

        PDDocument document = PDDocument.load(file, "");
        BufferedImage image = null;
        try {
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            if (document.isEncrypted()) {
                try {
                    System.out.println("Trying to decrypt...);
                    document.setAllSecurityToBeRemoved(true);
                    System.out.println("The file has been decrypted in .");
                }
                catch (Exception e) {
                    throw new Exception("cannot be decrypted. ", e);
                }
            }
            PDPage firstPage = (PDPage) document.getDocumentCatalog().getPages().get(0);
            pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB);
               // 0 means first page.

            image = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB);                  
            document.close();

    } catch (Exception e) {
            e.printStackTrace();
    } 

如果我在ImageIOUtil.writeImage(image , fileName+".jpg" ,300);上面写document.close();,程序会在项目路径中创建一个jpg文件。我需要将它放在byte []数组中而不是创建文件。可能吗?

1 个答案:

答案 0 :(得分:3)

这可以使用ImageIO.write(Image, String, OutputStream)来完成,它可以写入任意OutputStream而不是磁盘。 ByteArrayOutputStream可以将输出字节存储到内存中的数组中。

  <application
        ...
        android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
        ...
    </application>