Rotativa ActionAsPdf不调用ActionResult方法

时间:2019-05-11 17:43:13

标签: c# asp.net pdf rotativa

我想使用从ActionResult方法返回的剃刀获取pdf,然后从生成的pdf中获取字节。这一直有效,并且不确定是什么原因导致的。

我有这个代码

private byte[] CreateCertificatePart(CertificatePart part, int quoteid)
{
    var customSwitches = string.Format(
        "--print-media-type " +
        "--margin-top 10mm " +
        "--margin-bottom 10mm " +
        "--margin-left 10mm " +
        "--margin-right 10mm " +
        "--encoding utf-8 " +
        "--minimum-font-size 11 " +
        "--zoom 1.0 " +
        "--disable-smart-shrinking"
    );

    var pdfResult = new ActionAsPdf(part.ToString(), new { quoteid }) { CustomSwitches = customSwitches };

    var pdfBytes = pdfResult.BuildFile(ControllerContext);

    return pdfBytes;
}

part.ToString的计算结果为“ CertificateBody”

然后该方法应将结果返回到变量pdfResult

public ActionResult CertificateBody(int quoteid)
{
    try
    {
        var data = new PdfData();

        using (var repo = new PolicyQueries())
        {
            var cert = repo.GetJsonCert(quoteid);
            data = JsonConvert.DeserializeObject<PdfData>(cert.ScheduleJson);
        }

        return View(data.PdfBodyName, data.CertModel);
    }
    catch (Exception ex)
    {
        AppInsightLog.LogError(ex, $"NewCertificateBody{quoteid.ToString()}");
        return new HttpStatusCodeResult(400, "NewCertificateBody");
    }
}

但是,如果我在CertificateBody方法中放置一个断点,则不会调用它。因此,当此行运行时,我得到“对象引用未设置为对象实例”

var pdfBytes = pdfResult.BuildFile(ControllerContext);

如果控制器上下文中的某些内容为空(对象通常不为空),或者无法正确读取wkhtmktopdf.exe,我无法解决。

绝对是Rotativa的例外。

谢谢

0 个答案:

没有答案