我想使用从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的例外。
谢谢