需要从bytearray(Java)创建PDF

AEI*_*IOU 15 java

从DB2表我有blob,我正在转换为字节数组,所以我可以使用它.我需要获取字节数组并创建一个PDF.

这就是我所拥有的:

static void byteArrayToFile(byte[] bArray) {  
    try {  
        // Create file  
        FileWriter fstream = new FileWriter("out.pdf");  
        BufferedWriter out = new BufferedWriter(fstream);  
        for (Byte b: bArray) {  
            out.write(b);  
        }  
        out.close();  
    } catch (Exception e) {  
        System.err.println("Error: " + e.getMessage());  
    }  
}
Run Code Online (Sandbox Code Playgroud)

PDF它产生的不正确,它有一堆从上到下的黑线.

我实际上能够PDF通过使用基本相同的过程编写Web应用程序来创建正确的.Web应用程序和代码之间的主要区别是这一行:

response.setContentType("application/pdf");
Run Code Online (Sandbox Code Playgroud)

所以我知道字节数组是一个PDF,它可以完成,但我的代码byteArrayToFile将不会创建一个干净的PDF.

有关如何使其工作的任何想法?

Jas*_*rff 44

通过a发送输出FileWriter会破坏它,因为数据是字节,而FileWriters是用于写入字符.所有你需要的是:

OutputStream out = new FileOutputStream("out.pdf");
out.write(bArray);
out.close();
Run Code Online (Sandbox Code Playgroud)

  • 然后单击复选标记将其标记为已接受的答案.:) (5认同)
  • 嗨 Jason,我使用相同的并从 Web 服务获取字节数组。但即使无法打开pdf,它也显示“无法打开此文件,或者文件类型不受支持或文件已损坏”。请帮我解决这个问题。 (2认同)

dap*_*apc 5

可以利用 java 7 中引入的自动关闭接口。

try (OutputStream out = new FileOutputStream("out.pdf")) {
   out.write(bArray);
}
Run Code Online (Sandbox Code Playgroud)