IE 浏览器不显示使用 iTextSharp 设置的 PDF 的标题和文件名
Posted
技术标签:
【中文标题】IE 浏览器不显示使用 iTextSharp 设置的 PDF 的标题和文件名【英文标题】:IE browser does not display Title and File Name for PDF set using iTextSharp 【发布时间】:2016-04-05 11:53:43 【问题描述】:我正在使用 iTextSharp 将我的数据写入模板文件。然后使用 C# 中的 MemoryStream 呈现 PDF 文档。
在谷歌浏览器和部分火狐浏览器上一切正常。
var document = new Document();
//document open and content settings are done here
document.AddTitle("My Document Title"); //Statement-1
document.AddHeader("content-disposition", "inline;filename=MyFileName.pdf");
谷歌浏览器将标题显示为“我的文档标题”,下载时将文件名设置为“我的文件名”。 IE 和 Firefox 的情况并非如此。
IE 将站点名称显示为标题,并将查询参数分配为文件名。 Firefox 也有随机行为。甚至 javascript(window.open 设置)也不起作用。我希望浏览器显示与 Google chrome 相同的标题和文件名。
如果我错过了跨浏览器标准化标题和文件名的任何重要步骤,请指导。
【问题讨论】:
仅供参考:这不是真正的 iTextSharp 问题,而是浏览器或浏览器插件问题。我不确定你对这个问题有什么期望。 PDF 还可以,您几乎无法对跨浏览器进行“规范化”。 在加载外部插件内容时,没有规范浏览器在标题栏中显示的方式和内容,所以任何东西都可以去那里。 (加载后显示 PDF 标题是不同的问题) IHMO 假设它应在此处显示内容分发内容是错误的(因为文档仍在加载)。布鲁诺,将浏览器不应该做的事情归咎于浏览器,或者通过推广您的 iText 产品来回答这些事情并不酷。 【参考方案1】:这个问题由两部分组成:
显示标题
现在,您正在向 PDF 文档添加元数据:您正在为文档添加标题。在 PDF 查看器中打开 PDF 时,您希望在标题栏中看到此标题。为此,您必须设置 DisplayDocTitle
查看器首选项:
writer.AddViewerPreference(PdfName.DISPLAYDOCTITLE, new PdfBoolean(true));
现在,当您在 Adobe Reader 中打开 PDF 时,标题将显示在标题栏中。在 Chrome PDF 查看器(与 Adobe Reader 不同)中打开 PDF 时,无需设置此查看器首选项。 Chrome PDF 查看器仍然选择显示标题。当您在 Firefox 中打开 PDF 时,您正在使用 pdf.js 来查看 PDF。我不知道 pdf.js 是否尊重观众的偏好。我怀疑 MSIE 是否会查看在 PDF 浏览器插件中打开的 PDF 的查看器首选项。
总结:如果您使用 Adobe Reader 作为独立工具(在浏览器之外)打开下载的 PDF 并在标题栏中看到标题,那么您做对了。如果浏览器的标题栏中没有显示标题,则您无能为力,因为浏览器不支持您的需求。
定义文件名
要定义文件名,你需要使用这一行:
document.AddHeader("Content-Disposition", "inline;filename=MyFileName.pdf");
如果你有这条线,你就做对了。如果浏览器不遵守 Content-Disposition,则说明浏览器做错了。
请参阅 *** 上的以下帖子以获取解决方法的灵感:
PDF Handler : content-disposition filename Internet Explorer 9 does not use file name for inline attachments Content-Disposition Filename not working on IE Content-Disposition inline filename issue with IE ...(你的问题之前已经回答过很多次了。)
【讨论】:
以上是关于IE 浏览器不显示使用 iTextSharp 设置的 PDF 的标题和文件名的主要内容,如果未能解决你的问题,请参考以下文章