【问题标题】:Set .pdf name but prevent download with Rotativa设置 .pdf 名称但阻止使用 Rotativa 下载
【发布时间】:2016-12-14 05:18:46
【问题描述】:

我需要在显示之前设置 .pdf 名称。我试着这样设置

return new ViewAsPdf(GetViewName(), "", reportVM) 
{ 
   PageSize = Size.Letter, FileName = GetViewName() + "-" + DateTime.Now.ToShortDateString() + ".pdf"
 }; ,

但是这样会自动下载.pdf。是否可以设置.pdf名称而不下载?

谢谢!

【问题讨论】:

  • 您希望pdf显示在页面上吗?而不是要求用户保存文件?
  • 是的,我想展示它
  • 你永远无法阻止它被下载,如果它显示在浏览器中,它基本上已经被下载了。
  • 我明白,但没有设置 FileName 我得到 .pdf 的预览,用户可以下载或不下载。我只想知道是否可以设置文件名并保持该行为。谢谢!

标签: c# asp.net-mvc pdf rotativa


【解决方案1】:
var pdfResult = new Rotativa.PartialViewAsPdf("YourPartialView", model) {
    SaveOnServerPath = path, // Save your place
    PageWidth = 200,
    PageHeight = 350,
};

// This section allows you to save without downloading 

pdfResult.BuildPdf(this.ControllerContext);
return RedirectToAction("Index", "Home");

【讨论】:

    【解决方案2】:

    经过长期研究,答案是否定的。我唯一能做的就是使用响应头设置文件名并删除属性 FileName,所以现在的代码是:

    Response.AppendHeader("Content-Disposition", "inline; filename=" +GetViewName() + "_" + DateTime.Now.ToShortDateString() + ".pdf");
    return new ViewAsPdf(GetViewName(), "", reportVM) { PageSize = Size.Letter };
    

    也许有更好的解决方案,但这是我在阅读完所有内容后能得到的最好的解决方案。希望它也能帮助其他人!

    【讨论】:

    • 如果你想显示一个 pdf,你可以通过 <iframe><object> 来完成,但这并不能保证显示在所有用户上,因为浏览器本身应该有一个 pdf用于预览 pdf 的插件。
    【解决方案3】:
    Rotativa.AspNetCore.Options.Margins margins = new Rotativa.AspNetCore.Options.Margins(10, 2, 5, 2); 
            return new ViewAsPdf(estimate)
            {
                CustomSwitches = "--viewport-size 1024x768",
                PageMargins = margins,
                FileName = "Estimate -" + estimate.EstimateNumber + ".pdf",
                ContentDisposition = Rotativa.AspNetCore.Options.ContentDisposition.Inline
            }; 
    

    【讨论】:

      【解决方案4】:
      Response.AppendHeader("Content-Disposition", new System.Net.Mime.ContentDisposition { Inline = true, FileName = "myCorrectlyNamed.pdf" }.ToString());
      return new ViewAsPdf(GetViewName(), "", reportVM); 
      

      【讨论】:

      • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多