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

如何在Java中将Blob对象转换为PDF文件?,java,pdf,blob,inputstream,outputstream,Java,Pdf,Blob,Inputstream,Outputstream,我将以下情况转化为一个Java应用程序 从数据库a中检索此Blob对象,该对象表示数据库上的PDF文件: Blob blobPdf = cedolinoPdf.getAllegatoBlob(); 现在我必须把它转换成PDF文件。我怎样才能完成这项任务 Tnx如果Blob是PDF的二进制表示,那么只需获取字节。如果你想将PDF文件写入文件,你可以 Blob blobPdf = ...; File outputFile = new File("/tmp/blah/whatever.pdf");

我将以下情况转化为一个Java应用程序

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

Blob blobPdf = cedolinoPdf.getAllegatoBlob();
现在我必须把它转换成PDF文件。我怎样才能完成这项任务


Tnx

如果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”的文件中。

您可以使用结果集中的getBinaryStream(),然后可以从getBinaryStream()返回的InputStream创建文件

您的代码可能如下所示

Connection=null;
Statement=null;
结果集rs=null;
试一试{
Class.forName(“net.sourceforge.jtds.jdbc.Driver”).newInstance();
connection=DriverManager.getConnection(connectionURL,“sa”,“sa”);
statement=connection.createStatement();
rs=语句.executeQuery(“从tblBlobFiles中选择文件名、blobFile”);
如果(rs.next()){
字符串文件名=rs.getString(1);
Blob Blob=rs.getBlob(2);
InputStream=blob.getBinaryStream();
FileOutputStream fos=新的FileOutputStream(“C:\\DownloadedFiles”+“\\”+文件名);
int b=0;
而((b=is.read())!=-1)
{
fos.编写(b);
}
}
}捕获(IOE异常)
{
e、 getMessage();e.printStackTrace();
系统输出打印ln(e);
} 
捕获(SQLE异常)
{
e、 getMessage();e.printStackTrace();
系统输出打印ln(e);
}
您可以使用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();

什么意思?它已经是PDF文件了,还是?那你想做什么呢?展示它?是否保存?@ControlAltDel我需要将其显示到JSP中page@AndreaNobili-如果需要在web页面中显示,请创建一个servlet(或spring MVC控制器或其他什么),用于获取Blob并将其输入流传输到servlet的输出流。然后在您的页面中,您可以创建一个框架(或PDF查看器对象)来指向您的servlet据我所知,
Blob
没有
getInputStream
,而是
getBinaryStream()
:@Albert感谢您发现了这一点-我已经根据Long.MAX\u值更新了答案,在这个示例中是什么?无法获取ReadableByteChannel的大小吗?Log.MAX\u值是一个保持最大值的常量