【发布时间】:2016-06-03 06:22:47
【问题描述】:
我正在尝试从来自数据库的字节数组创建 pdf 文件。代码运行良好并创建了 pdf 文件,但我无法打开显示文件已损坏或损坏的文件。在这里我展示了我的完整代码,请指出我想要更改的内容或实现此类代码的正确方式。谢谢。
TestPDF:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestPDF {
public static void main(String[] args) throws FileNotFoundException {
String jdbcClassName="com.ibm.db2.jcc.DB2Driver";
String host="hostname",port="50000",db="dbname",dbuser="user",dbpass="pass";
String url="jdbc:db2://"+host+":"+port+"/"+db;
String user=dbuser;
String password=dbpass;
Connection con = null;
InputStream fetchStream = null;
try{
//Load class into memory
Class.forName(jdbcClassName);
//Establish connection
con = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = con.prepareStatement("select * from tgpoa01.aud_trail_dtl WHERE AUD_TRAIL_REC_ID = '-9223372036798517556'");
ResultSet rs = pstmt.executeQuery();
if(rs.next())
{
fetchStream = rs.getBinaryStream("AUD_TRAIL_MSG_TX");
if(rs.getString("AUD_PRCS_STAGE_CD").equals("CONT")){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fetchStream.read(buf)) != -1;) {
bos.write(buf, 0, readNum);
System.out.println("read " + readNum + " bytes,");
}
System.out.println("Byte array is="+bos);
} catch (Exception ex) {
ex.printStackTrace();
}
byte[] bytes = bos.toByteArray();
File someFile = new File("d://Output_File.pdf");
try{
FileOutputStream fos = new FileOutputStream(someFile);
fos.write(bytes);
fos.flush();
fos.close();
}catch(Exception e){
}
}
}
}catch(Exception e){
System.out.println("Exception in getting PDF : "+e);
}
}
}
【问题讨论】:
-
永远不要在不处理的情况下捕获异常。将
e.printStacktrace()添加到catch块内,查看是否发生异常 -
即使我添加 printStackTrace() 也没有出现错误
-
你有 3 个
catch在里面。其中一个吞下了Exception -
不,它实际上运行良好并创建了 pdf 文件,但是创建的 pdf 文件没有打开
-
您有
System.out.println输出。他们是否显示了合理的数据?并请分享损坏的 PDF 以供分析。
标签: java pdf pdf-generation bytearray