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

后端 未结 5 729
情歌与酒
情歌与酒 2020-12-09 04:55

My Java based webapp has a servlet which streams PDF content back to the browser based on request parameter.

e.g. user clicks on an A tag with an href of \"myApp/Fet

相关标签:
5条回答
  • 2020-12-09 05:29

    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
    0 讨论(0)
  • 2020-12-09 05:30

    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.

    0 讨论(0)
  • 2020-12-09 05:42

    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.

    0 讨论(0)
  • 2020-12-09 05:42

    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

    0 讨论(0)
  • 2020-12-09 05:42

    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);
    
    0 讨论(0)
提交回复
热议问题