如何改变这一个servlet流式传输一个PDF的浏览器页面的标题?(How to change th

2019-06-24 10:43发布

我的基于Java的web应用程序具有流PDF内容返回给基于请求参数的浏览器的servlet。

例如用户点击该标记和“对myApp / FetchPDFServlet?ID = 123”的一个href。 servlet映射拾取请求,PDF数据流以响应为MIME类型的应用程序/ PDF,关闭冲洗缓冲液。

然而,用于显示PDF页面的浏览器的标题栏显示为“FetchPDFServlet?ID = 123”

如何更改标题,浏览器将显示该显示PDF页面? 因此,浏览器的标题是“这是惊人的PDF”而不是“FetchPDFServlet?ID = 123”。

是否有可能呢? 如何最有效地做到这一点?

Answer 1:

这个头添加到您的HttpServletResponse:

response.setHeader("Content-Disposition","inline; filename=Here is the Amazing PDF");

我认为浏览器将它捡起来,并把它作为窗口的标题。



Answer 2:

您可以显示在iframe的PDF。
事情是这样的:

<html>
  <head>
      <title>Here is the amazing PDF</title>
      <style type="text/css">
       html, body, div, iframe { margin:0; padding:0; height:100%; }
       iframe { display:block; width:100%; border:none; }
      </style>
  </head>
  <body>
    <iframe width="100%" length="100%" src="myApp/FetchPDFServlet?id=123"/>
  </body>
</html>

因此,而不是链接到使用PDF文件myApp/FetchPDFServlet?id=123 ,你会链接到的东西,返回上面的html。 例如,一个jsp页: myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF



Answer 3:

我已经打到这个问题,而我的解决方案有我想不少限制我会分享。

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的 - 作品,但默认情况下在新窗口中没有选项卡中打开。 用户可以更改此选项卡中打开所有新视窗。
  • IE 8 - 不工作,符合市场预期:OP
  • 火狐 - 工程就像请客


Answer 4:

标签标题从PDF文档的元数据,特别是Title属性服用。 所以,如果你生成您的应用程序文件,你的PDF库应该有一个方法来设置文件的元数据。



Answer 5:

我试图在Java的解决方案,它的工作。 您可以在其他语言GIVEN头

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\"");
response.setContentType("application/pdf; name=\"MyFile.pdf\"");
response.getOutputStream().write(pdfAsBytesArray);


文章来源: How to change the title of a browser page which a servlet streamed a PDF to?