如何更改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);