Html ChromePDF下载缓存文件

Html ChromePDF下载缓存文件,html,google-chrome,pdf,Html,Google Chrome,Pdf,我们有一个在iframe中显示PDF的web应用程序。当使用Chrome PDF viewer的内置下载时,它似乎在下载缓存的PDF,而不是当前显示的PDF。但是,如果我们使用“打印”选项,然后选择“打印为PDF”,它将下载正确的PDF文件。在四处搜索之后,我发现了一些涉及HTTP头的奇怪的解决方案,但到目前为止还没有解决这个问题。此外,如果我打开iframe内容的url作为自己的选项卡,然后下载,它会下载正确的PDF文件。事实上,至少在Chrome和Edge浏览器中会发生这种情况 这是因为传递

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

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

这是因为传递给查看器(iframe或PDFObject)的pdf文件始终以相同的名称在内部缓存。 您可以将随机数或日期和时间添加为pdf的名称

我给你举一个我如何解决它的例子:

xhtml文件:

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

我想你应该看看。这只发生在谷歌浏览器上吗?如果没有,我认为你应该删除这个标签。@HernánAlarcón它确实只在Chrome、Firefox和Edge中出现,很好。是的,这里有完全相同的问题!只发生在铬!我们也面临同样的问题。iframe中的预览显示了正确的PDF,但当我们尝试下载相同的PDF时,它会显示旧版本。这个问题对于最新的chrome版本88来说非常特殊
<object type="application/pdf" id="idReport" data="#{yourController.serverAndContextPath}/PDFServlet" width="100%" height="500px"/>
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" + "\"");
                                     
    }
    
}