How to change the title of a browser page which a servlet streamed a PDF to?

走远了吗. 提交于 2019-11-28 08:32:10

Add this header to your HttpServletResponse:

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

I believe the browser will pick it up and use it as the title of the window.

You could display the PDF in an iframe.
Something like this:

<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>

So instead of linking to a pdf document using myApp/FetchPDFServlet?id=123, you would link to something that returns the above html. For example, a jsp page: myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF

I have hit this issue,and while my solution has quite a few restrictions I thought I would share it.

Baiscally I will open the pdf in a new tab, and then change its title from the original page.

$('#aa').click(function(){
    ref = window.open('resume.pdf','mywindow');     
    ref.onload = function(){
        ref.document.title="New Title";
    }
    return false;
    });
  });

Note that the parent and child pages must be in the same domain.

I have tested this in a few browsers, and here are the results:

  • Chrome 10 - Works like a treat
  • Safari 5 - Works, but by default opens in a new window not tab. User can change this to open all new windows in tabs.
  • IE 8 - Doesn't work, as expected :op
  • Firefox - Works like a treat

The tab title is taken from the PDF documents metadata, specifically the Title attribute. So if you generate the document in your app, your PDF library should have a way to set the documents metadata.

I have tried a solution in java and it worked. You can set given headers in other languages

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\"");
response.setContentType("application/pdf; name=\"MyFile.pdf\"");
response.getOutputStream().write(pdfAsBytesArray);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!