16

私の Java ベースの webapp には、要求パラメーターに基づいて PDF コンテンツをブラウザーにストリーミングするサーブレットがあります。

たとえば、ユーザーが「myApp/FetchPDFServlet?id=123」の href を持つ A タグをクリックします。サーブレット マッピングはリクエストを取得し、PDF データを MIME タイプ application/pdf としてレスポンスにストリーミングし、バッファをフラッシュして閉じます。

ただし、PDF を表示するページのブラウザ タイトル バーには「FetchPDFServlet?id=123」と表示されます。

PDF を表示するページのブラウザに表示されるタイトルを変更するにはどうすればよいですか? したがって、ブラウザのタイトルは「FetchPDFServlet?id=123」ではなく「Here is the amazing PDF」です。

それはまったく可能ですか?これを行うにはどうすればよいですか?

4

6 に答える 6

8

このヘッダーを HttpServletResponse に追加します。

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

ブラウザがそれを取得して、ウィンドウのタイトルとして使用すると思います。

于 2009-06-29T19:44:50.273 に答える
4

PDFをiframeに表示できます。
このようなもの:

<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

于 2009-06-29T16:30:11.903 に答える
2

私はこの問題に遭遇しました。私のソリューションにはかなりの制限がありますが、共有したいと思いました。

基本的に、新しいタブで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
  • Firefox - 御馳走のように動作します
于 2011-01-24T11:43:57.513 に答える
0

I found a rather simple solution to this problem. The main part is here the url mapping with /fileDownload/*

@WebServlet(urlPatterns = { "/fileDownload/*" })
@Slf4j
public class FileDownloadServlet extends HttpServlet
{
    @Inject
    private SimpleDocumentStoreService documentService;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    {
        String id = req.getParameter("id");

        if (StringUtils.isNotEmpty(id))
        {
            try
            {
                documentService.streamDatei(id, resp);
                resp.flushBuffer();
            } catch (IOException e)
            {
                log.error("error downloading file", e);
            }
       }
   }

}

And the caller:

<a href="#{request.contextPath}/fileDownload/#{document.name}?id=#{document.id}" target="_blank">
        <h:outputText value="#{document.name}"/>
    </a>
于 2021-02-15T10:40:25.427 に答える
0

私はJavaで解決策を試しましたが、うまくいきました。特定のヘッダーを他の言語で設定できます

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\"");
response.setContentType("application/pdf; name=\"MyFile.pdf\"");
response.getOutputStream().write(pdfAsBytesArray);
于 2015-07-02T10:59:11.880 に答える