从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
。
关于如何使其发挥作用的任何想法?
答案 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;
}