【问题标题】:Chrome PDF Downloads Cached FileChrome PDF 下载缓存文件
【发布时间】:2021-04-30 14:36:17
【问题描述】:

我们有一个在 iframe 中显示 PDF 的网络应用程序。使用 Chrome PDF 查看器的内置下载时,它似乎正在下载缓存的 PDF,而不是当前显示的 PDF。但是,如果我们使用打印选项,然后选择打印到 PDF,它会下载正确的 PDF 文件。在四处搜索之后,我遇到了一些涉及 HTTP 标头的奇怪解决方案,但到目前为止还没有解决这个问题。此外,如果我将 iframe 内容的 url 作为其自己的选项卡打开然后下载,它会下载正确的 PDF 文件。

【问题讨论】:

  • 我认为你应该看到How to create a Minimal, Reproducible Example。这只发生在谷歌浏览器中吗?如果没有,我认为您应该删除该标签。
  • @HernánAlarcón 它确实只发生在 Chrome、Firefox 和 Edge 中运行良好。
  • 是的,这里有完全相同的问题!只发生在 Chrome 中!
  • 我们也面临同样的问题。 iframe 中的预览会显示正确的 PDF,但是当我们尝试下载相同的 PDF 时,它会显示旧版本。该问题非常特定于最新的 chrome 版本 88

标签: html google-chrome pdf


【解决方案1】:

确实,至少在 Chrome 和 Edge 浏览器中会发生这种情况。

发生这种情况是因为您传递给查看器(iframe 或 PDFObject)的 pdf 文件始终在内部以相同的名称缓存。 您可以解决它添加一个随机数或日期和时间作为pdf的名称。

我举个例子说明我是如何解决的:

xhtml 文件:

<iframe type="application/pdf" id="idReport" src="#{yourController.serverAndContextPath}/PDFServlet" width="100%" height="500"></iframe>

<object type="application/pdf" id="idReport" data="#{yourController.serverAndContextPath}/PDFServlet" width="100%" height="500px"/>

Servlet 类:

public class PDFServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                     
             Date date = new Date();
             DateFormat hourdateFormat = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");   
             response.setHeader("Content-Type", "application/pdf"); 
             response.setHeader("Content-Disposition", "inline; filename=\"" + "pdfFileName" + hourdateFormat.format(date) + ".pdf" + "\"");
                                     
    }
    
}

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2016-11-28
    • 2016-08-25
    • 2021-10-11
    • 2012-07-31
    • 2017-04-12
    • 2017-10-27
    • 2010-10-06
    • 2012-12-24
    相关资源
    最近更新 更多