如何在Java中将Blob对象转换为PDF文件?

时间:2015-01-29 17:00:16

标签: java pdf blob inputstream outputstream

我在Java应用程序中遇到以下情况。

从数据库中检索此 Blob 对象,该对象是数据库上PDF文件的表示形式:

Blob blobPdf = cedolinoPdf.getAllegatoBlob();

现在我必须将其转换为PDF文件。我该怎么做这个任务?

TNX

3 个答案:

答案 0 :(得分:3)

如果Blob是PDF的二进制表示,那么您需要做的就是获取字节。如果你想将PDF写入文件,你可以做...

Blob blobPdf = ...;
File outputFile = new File("/tmp/blah/whatever.pdf");
FileOutputStream fout = new FileOutputStream(outputFile);
IOUtils.copy(blobPdf.getBinaryStream(), fout);

这应该将您的PDF写入名为" /tmp/blah/whatever.pdf"

的文件

答案 1 :(得分:1)

您可以使用ResultSet中的getBinaryStream(),然后可以从getBinaryStream()返回的InputStream创建一个文件。

您的代码可能看起来像这样

Connection connection = null;
Statement statement = null;
ResultSet rs = null;
  
try {
         
        Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(connectionURL, "sa", "sa");
        statement = connection.createStatement();
        rs = statement.executeQuery("SELECT fileName,blobFile FROM tblBlobFiles");
     
     
        if (rs.next()) {
  
String filename = rs.getString(1);
           Blob blob = rs.getBlob(2);
          InputStream is = blob.getBinaryStream();
              FileOutputStream fos = new FileOutputStream("C:\\DownloadedFiles"+ "\\" + filename);
 
int b = 0;
while ((b = is.read()) != -1)
{
    fos.write(b); 
}
        }
    } catch (IOException e) 
    {
    e.getMessage (); e.printStackTrace(); 
System.out.println(e); 
    } 
    catch (SQLException e) 
    {
    e.getMessage (); e.printStackTrace(); 
System.out.println(e); 
    }

如果需要所有blob,请对结果集进行迭代

答案 2 :(得分:1)

您可以使用Java NIO

InputStream fileBolb = rs.getBinaryStream("columnName");
ReadableByteChannel rbc = Channels.newChannel(fileBolb );
FileOutputStream fos = new FileOutputStream(filePath + fname);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();