Java 流式PDF在浏览器中以文本形式打开

Java 流式PDF在浏览器中以文本形式打开,java,pdf,filter,http-headers,Java,Pdf,Filter,Http Headers,我正在编写一个过滤器,将PDF流式传输到浏览器。但它并没有提示打开PDF。我得到的是浏览器窗口中显示的PDF内容,如下所示: %PDF-1.4 %âãÏÓ 4 0 obj <>stream xKoÂ0ïû+æØJ±CGo<-¤£ªIIIJEüû:Qi9 V¾xvw>ÍÚ{ê+âp-Á\*&_ÑöÄï:'21Ñý- )½¾qÄÔµárÙÌç$¥ÇL÷¢wݵ·´Ô£Wש^¨ÐØæT&Bg$ L¨wmUÀ2á89ºÓÝ8ª¬Ø Å«C®Ó$O0ØEYQYå÷

我正在编写一个过滤器,将PDF流式传输到浏览器。但它并没有提示打开PDF。我得到的是浏览器窗口中显示的PDF内容,如下所示:

%PDF-1.4 %âãÏÓ 4 0 obj <>stream xKoÂ0ïû+æØJ±CGo<-¤£ªIIIJEüû:Qi9 V¾xvw>ÍÚ{ê+âp-Á\*&_ÑöÄï:'21Ñý- )½¾qÄÔµárÙÌç$¥ÇL÷¢wݵ·´Ô£Wש^¨ÐØæT&Bg$ L¨wmUÀ2á89ºÓÝ8ª¬Ø Å«C®Ó$O0ØEYQYå÷jÛä¿ó,Æ[ïéµDLÊ´@guj`íà .:ÜîOòky#Ü/ªMõÃ_å2Ù:tk¾ôýBµð}eÀÀ,X¨ñ P¾¡ú±zËÁãSo6ÄÔWà?²ë1!Zôs|fÉÉ@QÖ8WzÁ:±.?Îßæçô¾RuÛ endstream endobj 1 0 obj<>>>/MediaBox[0 0 595.28 841.88]>> endobj 3 0 obj<> endobj 2 0 obj<> endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj xref 0 8 0000000000 65535 f
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=example.pdf
Connection: keep-alive
Keep-Alive: timeout=5
Accept-Ranges: bytes
Content-Type: application/pdf;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 13 Oct 2011 01:56:17 GMT

3db
%PDF-1.4
%âãÏÓ
3 0 obj <</Length 145/Filter/FlateDecode>>stream
xœMŽ1Â0…÷÷+ž›.ñ’&M\E‡B ƒ¸U+%µ´‹ßT¨È-÷½û8Þˆ}„0X­B`lpˆ¨0B”Þñ
Ãs¾wЮ7aƒ¢d7û=œÛ)N¥›1«ëÏz¢Æ+¿gjç
Û£¦±Œèoªi
½÷Ê:ÆëÓ=¥õ0¥fµ‰ÝR³ÂÁ¾(V
endstream
endobj
1 0 obj<</Parent 4 0 R/Contents 3 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 2 0 R>>>>/MediaBox[0 0 595.28 841.88]>>
endobj
2 0 obj<</BaseFont/Times-Bold/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
endobj
4 0 obj<</Type/Pages/Count 1/Kids[1 0 R]>>
endobj
5 0 obj<</Type/Catalog/Pages 4 0 R>>
endobj
6 0 obj<</Producer(iText 2.0.8 \(by lowagie.com\))/ModDate(D:20111013145617+13'00')/CreationDate(D:20111013145617+13'00')>>
endobj
xref
0 7
0000000000 65535 f 
0000000227 00000 n 
0000000389 00000 n 
0000000015 00000 n 
0000000477 00000 n 
0000000527 00000 n 
0000000571 00000 n 
trailer
<</Root 5 0 R/ID [<f6f88fa439f0fb7ffd89bb5bcc013692><d7556c8d673d80e2889958cdface8dba>]/Info 6 0 R/Size 7>>
startxref
702
%%EOF

0
《代码>%PDF-1.5%PDF-5.5%的数据格式>%5.5%PDF-1.5%PDF-1.4%的PDF-7.4%7.4%的7.4%的7.4%的7.4%的7.4%的7.4%的7.4%的7.4%的7.7%的7%的5.7%的7%的5.7%的7%的7%的7.7%的5.7%的7%的5.7%的7%的7.7%的7%的7%的7%的7%的7.7%的7%的7%的7.7%的7%的7%的7.7%的7%的7%的7%的7%的数据流流的7%的7%的7%的7%的7%的7%的7.7%的7%的7.7%的7%的7%的7%的7%的7%的7%的Ó$O0ØEYQYå÷JÛäåó,Æ[ïÊÊú@gujúÃ:ÜîOòkyÜ/Mõå2Ù:tkýBðeÀf|f|QÖ8Wz: 我检查了响应标题,它们显示如下:

%PDF-1.4 %âãÏÓ 4 0 obj <>stream xKoÂ0ïû+æØJ±CGo<-¤£ªIIIJEüû:Qi9 V¾xvw>ÍÚ{ê+âp-Á\*&_ÑöÄï:'21Ñý- )½¾qÄÔµárÙÌç$¥ÇL÷¢wݵ·´Ô£Wש^¨ÐØæT&Bg$ L¨wmUÀ2á89ºÓÝ8ª¬Ø Å«C®Ó$O0ØEYQYå÷jÛä¿ó,Æ[ïéµDLÊ´@guj`íà .:ÜîOòky#Ü/ªMõÃ_å2Ù:tk¾ôýBµð}eÀÀ,X¨ñ P¾¡ú±zËÁãSo6ÄÔWà?²ë1!Zôs|fÉÉ@QÖ8WzÁ:±.?Îßæçô¾RuÛ endstream endobj 1 0 obj<>>>/MediaBox[0 0 595.28 841.88]>> endobj 3 0 obj<> endobj 2 0 obj<> endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj xref 0 8 0000000000 65535 f
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=example.pdf
Connection: keep-alive
Keep-Alive: timeout=5
Accept-Ranges: bytes
Content-Type: application/pdf;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 13 Oct 2011 01:56:17 GMT

3db
%PDF-1.4
%âãÏÓ
3 0 obj <</Length 145/Filter/FlateDecode>>stream
xœMŽ1Â0…÷÷+ž›.ñ’&M\E‡B ƒ¸U+%µ´‹ßT¨È-÷½û8Þˆ}„0X­B`lpˆ¨0B”Þñ
Ãs¾wЮ7aƒ¢d7û=œÛ)N¥›1«ëÏz¢Æ+¿gjç
Û£¦±Œèoªi
½÷Ê:ÆëÓ=¥õ0¥fµ‰ÝR³ÂÁ¾(V
endstream
endobj
1 0 obj<</Parent 4 0 R/Contents 3 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 2 0 R>>>>/MediaBox[0 0 595.28 841.88]>>
endobj
2 0 obj<</BaseFont/Times-Bold/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
endobj
4 0 obj<</Type/Pages/Count 1/Kids[1 0 R]>>
endobj
5 0 obj<</Type/Catalog/Pages 4 0 R>>
endobj
6 0 obj<</Producer(iText 2.0.8 \(by lowagie.com\))/ModDate(D:20111013145617+13'00')/CreationDate(D:20111013145617+13'00')>>
endobj
xref
0 7
0000000000 65535 f 
0000000227 00000 n 
0000000389 00000 n 
0000000015 00000 n 
0000000477 00000 n 
0000000527 00000 n 
0000000571 00000 n 
trailer
<</Root 5 0 R/ID [<f6f88fa439f0fb7ffd89bb5bcc013692><d7556c8d673d80e2889958cdface8dba>]/Info 6 0 R/Size 7>>
startxref
702
%%EOF

0
HTTP/1.1200正常
服务器:ApacheCoote/1.1
内容配置:附件;文件名=example.pdf
连接:保持活力
保持活动状态:超时=5
接受范围:字节
内容类型:application/pdf;charset=ISO-8859-1
传输编码:分块
日期:2011年10月13日星期四01:56:17 GMT
3db
%PDF-1.4
%âãÏÓ
30 obj流
xœMŽ1 0…÷+ž›MžBž184; U+%µèèTÈ-xžB`lpˆ0BÞñ
Ãs¾wÐ7aƒ、d7ā=œÛN¥›1«ÏzÆ+gjç
ÛŒŒèoªi
½÷Ê:ÆÓ=¥õ0¥fµ‰RÁ¾(V
尾流
endobj
10 obj
endobj
20 obj
endobj
40 obj
endobj
50 obj
endobj
60 obj
endobj
外部参照
0 7
0000000000 65535 f
0000000 227 00000 n
000000038900000N
00000000150万元
000000047700000N
0000000 527 00000n
0000000 571 00000 n
拖车
起始外部参照
702
%%EOF
0
我试过:

  • 将内容配置设置为附件
  • 无内容处理
  • 将MIME设置为应用程序/下载
  • 将缓存控件设置为maxage=1
  • 将Pragma设置为public
  • 我还在tomcatweb.xml中设置了MIME类型
  • 创建了一个新的标准web应用程序,使用了完全相同的代码,生成PDF时没有任何问题

    • 以下是在将响应写入outputstream之前,您应该确保Servlet中包含的内容:

      res.setContentType( "application/pdf" );
      res.setHeader("Content-disposition",
                        "attachment; filename=" +
                        "Example.pdf" );
      
      附件标签用于告诉用户不要在浏览器中打开文档,而是使用某些PDF阅读器应用程序(如Adobe Acrobat)打开文档


      filename是要使用的文件的默认名称。

      一个技巧是在以.pdf结尾的URL中添加一个伪参数。

      在我的例子中,使用jasperreports生成报告时会出现此问题。 我找到了一个解决方案:

      response.setContentType( "application/pdf" );
      
      JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), cn);
      
      设置此项之前:

      response.setContentType( "application/pdf" );
      
      JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), cn);
      

      内容类型和内容处置标题似乎设置正确。我可以在HTTP Analyzer中检查标题您正在尝试使用哪种浏览器?请尝试使用Mozilla Firefox或Operator。这发生在IE、Firefox和Chrometh中。奇怪的是:(请检查是否所有文件类型都出现这种情况?如果发送一个伪.vcf文件并将内容类型设置为text/x-vcard,该怎么办?我认为我们试图做的是正确的,它的浏览器行为不正常:(我想它可能是应用程序上其他6个过滤器中的一个,做了一些有趣的事情。我之所以这么说,是因为我创建了一个简单的web应用程序,并将我的过滤器移植到其中,没有做任何更改,而且一切都很好。但是两个web应用程序的响应标题和内容都是相同的,当然,除了日期。对不起,我没有跟上。这意味着什么?示例:id是真正的参数,dummy是…浏览器会考虑.pdf来决定打开pdf阅读器插件。你有没有想过这个问题。我也有同样的问题