Java:需要从byte-Array创建PDF

时间:2009-11-22 05:32:41

标签: 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());  
    }  
}

但是它创建的PDF不正确,它上面有一堆黑线从上到下运行。

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

response.setContentType("application/pdf");

所以我知道字节数组是PDF并且可以完成,但byteArrayToFile中的代码不会创建干净的PDF

关于如何使其发挥作用的任何想法?

4 个答案:

答案 0 :(得分:42)

通过FileWriter发送输出会破坏它,因为数据是字节,FileWriter用于写入字符。您所需要的只是:

OutputStream out = new FileOutputStream("out.pdf");
out.write(bArray);
out.close();

答案 1 :(得分:2)

可以使用java 8中引入的autoclosable接口。

try (OutputStream out = new FileOutputStream("out.pdf")) {
   out.write(bArray);
}

答案 2 :(得分:0)

Get-FileFromURL

String content = new String(bytearray); content = content.replace(“ \ r”,“”).replace(“ \ uf8ff”,“”).replace(“'”,“”).replace( “ \”“,”“).replace(”`“,”“); String [] arrOfStr = content.split(” \ n“); PDDocument文档= new PDDocument(); PDPage页面= new PDPage(); document.addPage(page); try(PDPageContentStream cs = new PDPageContentStream(document,page)){cs.beginText(); //设置字体系列和字体大小 cs.setFont(PDType1Font.HELVETICA,14); cs.setNonStrokingColor(Color.BLACK); cs.newLineAtOffset(20,750); for(String str:arrOfStr){cs.newLineAtOffset(0,-15); cs.showText (str);} cs.newLine(); cs.endText();} document.save(znaFile); document.close();}

答案 3 :(得分:0)

 public static String getPDF() throws IOException {

        File file = new File("give complete path of file which must be read");
        FileInputStream stream = new FileInputStream(file);
        byte[] buffer = new byte[8192];
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int bytesRead;enter code here
        while ((bytesRead = stream.read(buffer)) != -1) {
            baos.write(buffer, 0, bytesRead);
        }
        System.out.println("it came back"+baos);
        byte[] buffer1= baos.toByteArray();
        String fileName = "give your filename with location";

        //stream.close();
        
        
         FileOutputStream outputStream =
                    new FileOutputStream(fileName);
         
         outputStream.write(buffer1);
        
         return fileName;
        
    }