Я пытаюсь сделать вид с контроллера, а затем преобразовать его в PDF.
Я получаю результат, но его 1474 пустых страницы и одна (последняя) страница имеют уменьшенную версию сгенерированного представления.
ControllerExtension.cs
public static class ControllerExtensions
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(
controller.ControllerContext,
viewResult.View,
controller.ViewData,
controller.TempData,
writer,
new HtmlHelperOptions()
);
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
SettingsController.cs
[HttpGet]
[Route ("/settings/a")]
public async Task<IActionResult> GenerateAcceptanceActPdf (int id, List<AcceptanceAct> model) {
var data = Repository.GetAcceptanceActByUserId (id);
var viewHtml = await this.RenderViewAsync ("AcceptanceAct", model);
var globalSettings = new GlobalSettings {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10 },
DocumentTitle = "PDF Report",
//Out = @"D:\PDFCreator\Employee_Report.pdf"
};
var output = _converter.Convert (new HtmlToPdfDocument () {
GlobalSettings=globalSettings,
Objects = {
new ObjectSettings () {
HtmlContent = viewHtml,
PagesCount = true,
WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine (Directory.GetCurrentDirectory (), "assets", "styles.css") }
},
}
});
return File (output, "application/pdf");
}
AcceptanceAct.cshtml
@model List<AcceptanceAct>
<p>some text here</p>
ПРИМЕЧАНИЕ. На рисунке ниже сгенерированное представление на последней странице объединено с Layout и AcceptanceAct.cshtml.
Как я могу растянуть его на всю страницу и почему вместо 1 есть 1475 страниц?