C # MVC генерировать PDF из просмотра с NReco.PdfGenerator - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время я работаю над проектом, в котором мне нужно создать «панель мониторинга», которую можно экспортировать в формате PDF.Я хотел использовать Rotativa, но поскольку наше приложение использует .NET Framework 4.0, это невозможно.Итак, я нашел NReco PdfGenerator.

Вот код, которым я создаю результат PDF:

var ViewAsString = RenderViewAsString("~/Views/QMetrics/StandardDashboard.cshtml", viewModel);
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.PageWidth = 1600;
htmlToPdf.PageHeight = 900;
var pdfBytes = htmlToPdf.GeneratePdf(ViewAsString);
FileResult FileResult = new FileContentResult(pdfBytes, "application/pdf");
FileResult.FileDownloadName = "Dashboard-" + viewModel.ProjectName + "-" + 
DateTime.Now.ToString() + "-.pdf";
return FileResult;

Он успешно создает страницу PDF со всем содержимым, полученным из бэкэнда (информация о проекте и т. Д.), Ностраница выглядит очень некрасиво.На исходной странице у меня есть 2 столбца, а на странице PDF все помещается в один столбец.Я попробовал несколько разных размеров страниц, и я также изменил макет, чтобы он не отвечал, но ничего не изменилось.

Моим первым предложением было то, что файлы CSS и JS, на которые есть ссылки, не были включены при создании PDF get, поэтому я скопировал весь материал, полученный из внешних файлов (bootstrap, Chart.js), и вставил его непосредственно вФайл .cshtml.Но ничего не изменилось.Моя Диаграмма не рендерится / не загружается, а отсутствующие CSS-элементы все еще отсутствуют.

На веб-сайте NReco PDFGenerator говорят, что он поддерживает сложный код CSS, а также код JavaScript, поэтому я не совсем понимаю, почему это не работает.

Кто-нибудь здесь сталкивается с NReco или кто-то может порекомендовать что-то еще, что работает для .NET 4.0?

1 Ответ

0 голосов
/ 12 июня 2018

NReco PdfGenerator внутренне использует инструмент wkhtmltopdf , чтобы вы могли проверить его и его параметры.

Относительно 2 столбцов: если вы не используете flex / grid layout, все должно работать нормально.Возможно, вам нужно отключить логику умного сжатия wkhtmltopdf (включена по умолчанию) и точно определить размер «окна» веб-страницы (с опцией «--viewport-size 1600»).

Относительно CSS и диаграмм: вам нужноУбедитесь, что к CSS-файлам может получить доступ wkhtmltopdf, самый простой способ сделать это - запустить wkhtmltopdf.exe из командной строки и проверить вывод журнала консоли (или обработать событие PdfGenerator «LogReceived» в C #).Для Chart.js убедитесь, что div контейнера диаграммы имеет явную ширину (не в%), и что нет ошибок js (вы можете получить их в консоли, указав опцию --debug-javascript).Если ваш js-код использует метод 'bind', вы должны включить polyfill, поскольку версия движка WebKit, используемая в wkhtmltopdf, не поддерживает 'bind'.

...