我的基于Java的webapp有一个servlet,它根据请求参数将PDF内容流回浏览器。
e.g。用户点击href为“myApp / FetchPDFServlet?id = 123”的A标签。 Servlet映射获取请求,将PDF数据流式传输到响应为mime-type application / pdf,关闭刷新缓冲区。
然而,显示PDF的页面的浏览器标题栏显示为“FetchPDFServlet?id = 123”
如何更改浏览器为显示PDF的页面显示的标题? 所以浏览器标题是“这里是令人惊叹的PDF”而不是“FetchPDFServlet?id = 123”。
有可能吗?怎么做到最好?
答案 0 :(得分:7)
将此标题添加到您的HttpServletResponse:
response.setHeader("Content-Disposition","inline; filename=Here is the Amazing PDF");
我相信浏览器会把它拿起并用作窗口的标题。
答案 1 :(得分:4)
您可以在iframe中显示PDF 像这样:
<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>
因此,不是使用myApp/FetchPDFServlet?id=123
链接到pdf文档,而是链接到返回上述html的内容。例如,jsp页面:myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF
答案 2 :(得分:2)
我遇到了这个问题,虽然我的解决方案有很多限制,但我认为我会分享它。
Baiscally我会在新标签页中打开pdf,然后从原始页面更改标题。
$('#aa').click(function(){
ref = window.open('resume.pdf','mywindow');
ref.onload = function(){
ref.document.title="New Title";
}
return false;
});
});
请注意,父页面和子页面必须位于同一个域中。
我在几个浏览器中对此进行了测试,结果如下:
答案 3 :(得分:1)
标签标题取自PDF文档元数据,特别是Title属性。因此,如果您在应用中生成文档,则PDF库应该有一种设置文档元数据的方法。
答案 4 :(得分:0)
我在java中尝试过一个解决方案,但它确实有效。您可以使用其他语言设置指定的标题
response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\"");
response.setContentType("application/pdf; name=\"MyFile.pdf\"");
response.getOutputStream().write(pdfAsBytesArray);
答案 5 :(得分:0)
我找到了一个相当简单的解决方案。这里的主要部分是与 /fileDownload/*
的 url 映射@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);
}
}
}
}
和来电者:
<a href="#{request.contextPath}/fileDownload/#{document.name}?id=#{document.id}" target="_blank">
<h:outputText value="#{document.name}"/>
</a>