【问题标题】:How to save Rotativa PDF on server如何在服务器上保存 Rotativa PDF
【发布时间】:2014-12-23 21:08:46
【问题描述】:

我正在使用 Rotativa 在我的“MVC”应用程序中生成 PDF。如何保存 Rotativa PDF?完成所有过程后,我需要将文档保存在服务器上。

代码如下:

public ActionResult PRVRequestPdf(string refnum,string emid)
{
    var prv = functions.getprvrequest(refnum, emid);            
    return View(prv);

}
public ActionResult PDFPRVRequest()
{
    var prv = Session["PRV"] as PRVRequestModel;
    byte[] pdfByteArray = Rotativa.WkhtmltopdfDriver.ConvertHtml("Rotativa", "Approver", "PRVRequestPdf");
    return new Rotativa.ViewAsPdf("PRVRequestPdf", new { refnum = prv.rheader.request.Referenceno });            

} 

【问题讨论】:

    标签: asp.net-mvc-5 rotativa


    【解决方案1】:

    你可以试试这个

    var actionResult = new ActionAsPdf("PRVRequestPdf", new { refnum = prv.rheader.request.Referenceno, emid = "Whatever this is" });
    var byteArray = actionResult.BuildPdf(ControllerContext);
    var fileStream = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
    fileStream.Write(byteArray, 0, byteArray.Length);
    fileStream.Close();
    

    如果这不起作用,那么您可以按照答案here

    只要确保这样做不会让PRVRequestPdf 作为 PDF 视图返回,而是像上面那样作为普通视图返回(只提到设法与我自己产生了很多乐趣)。

    【讨论】:

      【解决方案2】:

      另一个有用的答案:

      我找到了解决方案here

                  var actionPDF = new Rotativa.ActionAsPdf("YOUR_ACTION_Method", new { id = ID, lang = strLang } //some route values)
                  {
                      //FileName = "TestView.pdf",
                      PageSize = Size.A4,
                      PageOrientation = Rotativa.Options.Orientation.Landscape,
                      PageMargins = { Left = 1, Right = 1 }
                  };
                  byte[] applicationPDFData = actionPDF.BuildPdf(ControllerContext);
      

      这是原thread

      【讨论】:

      • 这个解决方案也使用了丹尼尔的答案。
      • @meJustAndrew 是的,我知道这就是为什么我在回答的第一行提到了他的回答
      【解决方案3】:

      您可以使用 ViewAsPdf 实现此目的。

      [HttpGet]
      public ActionResult SaveAsPdf(string refnum, string emid)
      {
          try
          {
              var prv = functions.getprvrequest(refnum, emid);
              ViewAsPdf pdf = new Rotativa.ViewAsPdf("PRVRequestPdf", prv)
              {
                  FileName = "Test.pdf",
                  CustomSwitches = "--page-offset 0 --footer-center [page] --footer-font-size 8"
              };
              byte[] pdfData = pdf.BuildFile(ControllerContext);
              string fullPath = @"\\server\network\path\pdfs\" + pdf.FileName;
              using (var fileStream = new FileStream(fullPath, FileMode.Create, FileAccess.Write))
              {
                  fileStream.Write(pdfData, 0, pdfData.Length);
              }
              return Json(new { isSuccessful = true }, JsonRequestBehavior.AllowGet);
          }
          catch (Exception ex)
          {
              //TODO: ADD LOGGING
              return Json(new { isSuccessful = false, error  = "Uh oh!" }, JsonRequestBehavior.AllowGet);
              //throw;
          }
      }
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        var fileName = string.Format("my_file_{0}.pdf", id);
        var path = Server.MapPath("~/App_Data/" + fileName);
        System.IO.File.WriteAllBytes(path, pdfByteArray );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-15
          • 2014-12-08
          • 2016-09-11
          • 1970-01-01
          • 2015-09-13
          • 2016-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多