我正在使用iTextSharp将我的数据写入模板文件。然后使用C#中的MemoryStream呈现PDF文档。
所有功能都可以通过Google Chrome实现,也可以部分使用Firefox。
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");
Google Chrome将标题显示为"我的文档标题"在下载时,它将文件名设置为" MyFileName"。 IE和Firefox的情况也不是这样。
IE将网站名称显示为标题,并将查询参数指定为文件名。 Firefox也有随机行为。即使是javascript(window.open设置)也行不通。我希望浏览器显示与Google Chrome相同的标题和文件名。
请指导我是否遗漏了在浏览器中规范化标题和文件名的重要步骤。
答案 0 :(得分:0)
这个问题由两部分组成:
目前,您正在向PDF文档添加元数据:您正在为文档添加标题。在PDF查看器中打开PDF时,您希望在标题栏中看到此标题。要实现此目的,您必须设置DisplayDocTitle
查看器首选项:
writer.AddViewerPreference(PdfName.DISPLAYDOCTITLE, new PdfBoolean(true));
现在,当您在Adobe Reader中打开PDF时,标题将显示在标题栏中。在Chrome PDF查看器中打开PDF(与Adobe Reader不同)时,您无需设置此查看器首选项。 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,那么浏览器就是错误的。
请参阅StackOverflow上的以下帖子,获取解决方法的灵感:
(您的问题之前已多次得到解答。)