我有一个动作,在新的浏览器标签中显示PDF。
public ActionResult Print()
{
var cd = new ContentDisposition
{
FileName ="something.pdf",
Inline = true
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(reportResponse.Data.Document, MediaTypeNames.Application.Pdf);
}
文件名工作正常。当我下载文件时,它的名字我想要“something.pdf”。
问题是当谷歌浏览器在新的浏览器选项卡中打开PDF时,它显示控制器操作名称(打印)作为PDF的标题。这就是我想要改变的。我附上了一张图片以供澄清。
查看代码: Url.Action(“打印”,“控制器”,新{area =“Area”}),新{@target =“_ blank”}
答案 0 :(得分:2)
对文件名的操作方法传递参数,并确保参数名称为'id'。
View code: Url.Action("Print", "Controller", new { id = "filename", area = "Area" }), new { @target = "_blank" }
public ActionResult Print(id)
{
var cd = new ContentDisposition
{
FileName ="something.pdf",
Inline = true
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(reportResponse.Data.Document, MediaTypeNames.Application.Pdf);
}`
答案 1 :(得分:2)
添加到kodandarami的答案中,
当您从ASP.NET MVC传回PDF文件时,页面标题设置为用于到达控制器的路由配置的最后一个url部分。
知道这一点后,您可以通过在控制器的路由配置中设置一个参数来动态命名标题,例如:
routes.MapRoute(
"Print",
"print/{pdfName}",
new { controller = "Print", action = "Index", pdfName = UrlParameter.Optional }
);
然后MVC将使用此值,因为它认为它是一个单独的页面。
在网址中将其用作 “ / print / this-is-my-pdf-title” ,不是'/ print?pdfName = this-is-my-pdf-title” 。
作为querystring参数,MVC只会回退为调用PDF“ print”。
注意: 如this related question中所述,
当文本在查询字符串“?”之前时,IIS对禁止的字符有更严格的规定字符。不允许您<,>,*,%,&,:,\
(See MS Reference)
这些字符中的任何一个,即使经过编码,也会给您一个“ 路径有潜在危险”的400错误。
确保删除/替换这些禁止的字符。
。
答案 2 :(得分:0)
尝试以下return语句:
return File(reportResponse.Data.Document, MediaTypeNames.Application.Pdf, "something.pdf");
答案 3 :(得分:0)
如果您使用 PdfConverter 生成pdf文档,则需要在对象中设置标题,如下所示
PdfConverter converter = new PdfConverter();
converter.PdfDocumentInfo.Title = "Your PDF File Name";
希望这有帮助!
答案 4 :(得分:0)
我通过使用iframe解决了这个问题。
创建一个填充标题和pdf网址的操作。
public ActionResult ArticleSpecification(int ArticleID)
{
using (var context = new myEntities())
{
Article article = context.Article.FirstOrDefault(a => a.ArticleID == ArticleID);
ViewData["Title"] = article.Code + " - " + article.Description;
ViewData["PdfSource"] = "ArticleSpecificationPdf?ArticleID=" + article.ArticleID;
return View("~/Views/Specification/pdfview.cshtml");
}
}
pdfview.cshtml:带有iframe以查看pdf和标题。
@{
Layout = "";
}
<!DOCTYPE html>
<html>
<head>
<title>@ViewData["Title"]</title>
<style>
html, body, iframe {
height: 100%;
width: 100%;
margin: 0;
border: 0;
}
body {
overflow-y: hidden;
}
</style>
</head>
<body>
<iframe src="@ViewData["PdfSource"]"></iframe>
</body>
</html>
返回pdf内容的动作。
public FileResult ArticleSpecificationPdf(int ArticleID)
{
using (var context = new myEntities())
{
PdfFile file = null;
Article article = context.Article.FirstOrDefault(a => a.ArticleID == ArticleID);
if (article != null && article.SpecificationPdfID != null)
file = context.PdfFile.FirstOrDefault(a => a.PdfFileID == article.SpecificationPdfID);
return new FilePathResult(file.path, "application/pdf");
}
}