我想打印动态的标题数据,它们来自控制器。
那么如何使用Rotativa pdf在标题中显示该动态数据。
我的标题数据包括名称,地址,联系信息和其他附加信息,这些信息是动态的,并从控制器端生成。
我使用html page
创建了带有静态标题的pdf,如下所示string header = Server.MapPath("~/Static/NewFolder/PrintHeader.html");
string footer = Server.MapPath("~/Static/NewFolder/PrintFooter.html");
string customSwitches = string.Format("--header-html \"{0}\" " +
"--header-spacing \"0\" " +
"--footer-html \"{1}\" " +
"--footer-spacing \"10\" " +
"--footer-font-size \"10\" " +
"--header-font-size \"10\" ", header, footer);
return new ViewAsPdf("SchedulePrintPdf", modelData)
{
CustomSwitches = customSwitches,
PageOrientation = Orientation.Portrait,
PageMargins = { Top = 20, Bottom = 22 },
SaveOnServerPath = filePath, FileName = Path.GetFileName(fileName)
};
这适用于Static header。
现在我需要动态地从这个控制器发送标题文本。
答案 0 :(得分:1)
我曾经有过类似的规范,并通过额外的打印视图实现了它。
在那里,您可以从控制器获取其他数据并包含特殊的CSS样式。
使用bootstrap时,请考虑用于PDF打印的分辨率非常小,因此必须使用col-xs-*
类。
在我的情况下,Print-View被称为ResultPrint.cshtml,而在Controller中我有这个功能:
public ActionResult GeneratePDF(int id)
{
InputPrintModel model = db.InputPrintModel.Find(id);
if (model == null)
{
return HttpNotFound();
}
try
{
return new ViewAsPdf("ResultPrint", model);
}
catch (Exception ex)
{
// Error Dialog + Logging
return View("Result", model);
}
}
在我的Result.cshtml中调用,如下所示:
@Html.ActionLink("Generate PDF", "GeneratePDF", new { id = Model.Id })
修改强>
当您查看此答案https://stackoverflow.com/a/26544977/2660864时,您可以看到,您可以在CustomActions中使用.cshtml文件(我没有测试此代码)
public ActionResult ViewPDF()
{
string cusomtSwitches = string.Format("--print-media-type --allow {0} --footer-html {0} --footer-spacing -10",
Url.Action("Footer", "Document", new { area = ""}, "https"));
return new ViewAsPdf("MyPDF.cshtml", model)
{
FileName = "MyPDF.pdf",
CustomSwitches = customSwitches
};
}
[AllowAnonymous]
public ActionResult Footer()
{
// get custom data for view
return View(model);
}