如何更改servlet流式传输PDF的浏览器页面的标题?
我的基于Java的webapp有一个servlet,它根据请求参数将PDF内容流回浏览器。
例如,用户点击href为“myApp / FetchPDFServlet?id = 123”的A标签。 Servlet映射获取请求,将PDF数据流式传输到响应为mime-type application / pdf,关闭刷新缓冲区。
但是,显示PDF的页面的浏览器标题栏显示为“FetchPDFServlet?id = 123”
如何更改浏览器为显示PDF的页面显示的标题? 所以浏览器标题是“这里是惊人的PDF”而不是“FetchPDFServlet?id = 123”。
有可能吗? 怎么做到最好?
将此标头添加到您的HttpServletResponse:
response.setHeader("Content-Disposition","inline; filename=Here is the Amazing PDF");
我相信浏览器会把它拿起并用作窗口的标题。
您可以在iframe中显示PDF。
像这样的东西:
Here is the amazing PDF
因此,不是使用myApp/FetchPDFServlet?id=123
链接到pdf文档,而是链接到返回上述html的内容。 例如,一个jsp页面: myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF
我遇到了这个问题,虽然我的解决方案有很多限制,但我认为我会分享它。
在Baiscally,我将在新标签中打开pdf,然后从原始页面更改其标题。
$('#aa').click(function(){ ref = window.open('resume.pdf','mywindow'); ref.onload = function(){ ref.document.title="New Title"; } return false; }); });
请注意,父页面和子页面必须位于同一个域中。
我在几个浏览器中对此进行了测试,结果如下:
- Chrome 10 – 就像一种享受
- Safari 5 – Works,但默认情况下在新窗口中打开而不是选项卡。 用户可以更改此选项以打开选项卡中的所有新窗口。
- IE 8 – 按预期不起作用:op
- Firefox – 就像一种享受
选项卡标题取自PDF文档元数据,特别是Title属性。 因此,如果您在应用中生成文档,则PDF库应该有一种设置文档元数据的方法。
我在java中尝试过一个解决方案,但它确实有用。 您可以使用其他语言设置给定的标题
response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\""); response.setContentType("application/pdf; name=\"MyFile.pdf\""); response.getOutputStream().write(pdfAsBytesArray);