使用java servlet在浏览器中显示Pdf
我的应用程序中有 pdf 文件。我需要在浏览器中显示pdf。我正在将文件作为 fileInputStream 读取,我需要在我的应用程序中的浏览器中显示 pdf。但我没有 pdf 路径,我有文件流。
请给我一些建议和示例
我使用ajax来显示pdf,我使用call_method() javascript ajax请求方法来调用showPdf操作,在showpdf操作中只需将pdf文件转换为ByteArrayOutputStream并将结果写入out放流。但它显示了下面提到的结果。
JSP 中的结果:
%PDF-1.4 %��� 1 endstream endobj 4 0 obj <>>>/MediaBox[0 0 595 842]>> endobj 1 0 obj <> endobj 3 0 对象 <> endobj 5 0 obj <> endobj 6 0 obj <> endobj 外部参照 0 7 0000000000 65535 f 0000000389 00000 n 0000000015 00000 n 0000000477 00000 n 0000000232 00000 n 0000000540 00000 n 0000000585 00000 n 拖车 <<142354f5ebefd65d6aacd33a7cb2b4ab>]/Info 6 0 R/尺寸 7>> startxref 707 %%EOF
请给出一些建议。
Javascript ajax:
call_method(); <br/>
function call_method(){
Ext.Ajax.request({
waitMsg: 'Saving changes...',
url:'test.action?method=showPdf',
params : { },
failure:function(response,options){
},
success:function(response,options){
$("#pdf_content").show();
$("#pdf_content").html(response.responseText);
$("#pdf_content").show('slow');
}
});
}
Java 方法:
public String showPdf() throws IOException {
getResponse().setContentType("application/pdf");
getResponse().setHeader("Content-disposition","inline; filename=automatic_start.pdf" );
ByteArrayOutputStream baos = getByteArrayOutputStream();
getResponse().setContentLength(baos.size());
ServletOutputStream sos;
sos = getResponse().getOutputStream();
baos.writeTo(sos);
sos.flush();
return null;
}
private ByteArrayOutputStream getByteArrayOutputStream() throws IOException {
String filePath = "/homefolder/";
String folderPath=filePath+"1122/automatic_start.pdf";
File file = new File(folderPath);
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[256];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
//Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
ex.printStackTrace();
}
return bos;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须将
InputStream
写入响应OutputStream
,如下所示:Content-Disposition
必须内联
>。Content-Type
必须是application/pdf
。Content-Length
将是InputStream
中总数据的长度(以字节为单位)。设置后,将输入流数据写入响应的输出流。
有这样的效果:
You will have to write your
InputStream
to your responseOutputStream
as follows:Content-Disposition
will have to beinline
.Content-Type
will have to beapplication/pdf
.Content-Length
will be the length (in bytes) of the total data in theInputStream
.Once set, write the input stream data to output stream of the response.
Something of this effect:
在您的 servlet 中,将 MIME 类型设置为 PDF 的正确类型:
application/pdf
请参阅 http://www.iana.org/assignments/media-types/
In your servlet, set the MIME type to the correct one for PDF :
application/pdf
See http://www.iana.org/assignments/media-types/