DinkToPdf плохо генерирует PDF на .Net Core при попытке визуализации представления из контроллера - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь сделать вид с контроллера, а затем преобразовать его в PDF. Я получаю результат, но его 1474 пустых страницы и одна (последняя) страница имеют уменьшенную версию сгенерированного представления. enter image description here

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 страниц?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...