Отображение верхних и нижних колонтитулов в PDF, сгенерированном Rotativa
Я пытаюсь указать верхние и нижние колонтитулы в PDF, сгенерированном библиотекой Rotativa. Как ответил автор здесь это должно быть возможно с помощью CSS (описано здесь ). Однако я не могу этого сделать.
У меня есть таблица стилей, загруженная в мета-тег:
<link href="print.css" rel="stylesheet" type="text/css" media="print" />
И в таблице стилей внизу:
@page {
@top-left {
content: "TOP SECRET";
color: red
}
@bottom-right {
content: counter(page);
font-style: italic
}
}
И затем генерирует PDF по:
public ActionResult ShowPdf()
{
var model = new Model();
return new ViewAsPdf("view.cshtml", model)
{
FileName = "Report.pdf",
CustomSwitches = "--print-media-type"
};
}
И затем ничего не появляется в верхнем и Нижнем колонтитулах PDF. Есть идеи?
4 ответа:
Я нашел документацию wkhtmltopdf, и там описано, как управлять колонтитулами.
В принципе, вы можете просто добавить--header-center "text"
(или аналогичные переключатели) в список аргументов, и это все.Чтобы использовать его с Rotativa было бы:
public ActionResult ShowPdf() { var model = new Model(); return new ViewAsPdf("view.cshtml", model) { FileName = "Report.pdf", CustomSwitches = "--print-media-type --header-center \"text\"" }; }
(я не знаю, нужно ли
--print-media-type
.)
Если вы хотите отобразить представление вместо текста в верхнем/нижнем колонтитуле, то вы можете сделать это следующим образом:
public ActionResult ViewPDF() { string customSwitches = 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() { return View(); }
Не забудьте добавить атрибут [AllowAnonymous]в действие нижнего колонтитула, иначе Rotatina не сможет получить доступ к пути.
Вот как я это сделал (полностью):
public ActionResult PrintPDF(int? selectedSiteRotaId, int selectedSiteId) { string footer = "--footer-center \"Printed on: " + DateTime.Now.Date.ToString("MM/dd/yyyy") + " Page: [page]/[toPage]\"" + " --footer-line --footer-font-size \"9\" --footer-spacing 6 --footer-font-name \"calibri light\""; return new ActionAsPdf("RenderPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 }) { FileName = "PDF_Output.pdf", PageOrientation = Orientation.Landscape, MinimumFontSize = 10, //PageMargins = new Margins(5,5,5,5), PageSize = Size.A3, CustomSwitches = footer }; //var pdfResult = new ActionAsPdf("RenderPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 }) //{ // FileName = "PDF_Output.pdf", // PageOrientation = Orientation.Landscape, // MinimumFontSize = 10 //}; //var binary = pdfResult.BuildPdf(this.ControllerContext); //return File(binary, "application/pdf"); } public ActionResult RenderPDF(int? selectedSiteRotaId, int selectedSiteId) { return RedirectToAction("Index", "PrintPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 }); }