- PVSM.RU - https://www.pvsm.ru -

Генерирование PDF в ASP.NET Core

Долго ли, коротко ли, вместе с новой Visual Studio 2017 [1] в релиз вышел ASP.NET Core [2]. Тулинг [3] лишился приставки preview, как и все инфраструктурные сборки, поставляемые Microsoft'ом. На мой взгляд, фреймворк получился отличным, а история с cjproj=>xproj=>project.json=>csproj и поломанная совместимость при переходе с RC1 на RC2 — это всё же разумная плата за скорость развития. Ну да ладно, опустим дела минувших дней, и вернёмся к текущим реалиям.

А реалии таковы, что есть задачи, и есть инструменты которые их решают. В частности, передо мной встала задача генерирования PDF-документов средствами ASP.NET Core. «Хмм… Наверняка уже есть что-то готовое...», — подумал я. Как бы не так. Вернее готовые библиотеки для этого есть, но платные, а вот чего-то OpenSource'ного нет. «А как же iText?», — спросите вы. «AGPL», — ответит вам страничка с лицензией на гитхабе. Для OpenSource проектов бесплатно, а для коммерческого использования, извольте заплатить. Ну что ж, раз нет инструмента, решающего мою задачу, значит я сделаю его сам.

В области генерирования PDF самым железобетонным вариантом для меня является wkhtmltopdf [4]. Алгоритм в данном случае простой — делаем HTML страницу с необходимыми данными — конвертируем её в PDF — Profit! Таким образом родилась обёртка над wkhtmltopdf. Всё что ей требуется для работы — это указать путь к исполняемому файлу wkhtmltopdf. В простейшем варианте это выглядит вот так:

var wkhtmltopdf = new FileInfo(@"C:Program Fileswkhtmltopdfbinwkhtmltopdf.exe");
var converter = new HtmlToPdfConverter(wkhtmltopdf);
var pdfBytes = converter.ConvertToPdf(html);

Для конвертирования используется поточный вариант работы. Данные передаются в stdin и забираются из stdout. Никаких временных файлов. Прекрасно работает в связке с ASP.NET Core. Опционально можно указать дополнительные параметры в виде формата и ориентации листа, отступов, максимального времени выполнения, ч/б режима, времени выполнения JavaScript'а, необходимости загрузки изображений. С полным списком параметров можно ознакомиться на GitHub [5].

Если хотя бы один человек решит свою проблему с помощью этого инструмента, значит он был создан не зря. Да пребудет с вами MIT.

Ссылка на GitHub [6].

Автор: бро

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-2/249838

Ссылки в тексте:

[1] Visual Studio 2017: https://www.visualstudio.com/

[2] ASP.NET Core: https://www.asp.net/core

[3] Тулинг: https://www.microsoft.com/net/download/core

[4] wkhtmltopdf: http://wkhtmltopdf.org/

[5] ознакомиться на GitHub: https://github.com/NoMoreLoad/WkWrap/blob/1.0.2/WkWrap.Core/ConversionSettings.cs

[6] Ссылка на GitHub: https://github.com/NoMoreLoad/WkWrap

[7] Источник: http://habrahabr.ru/sandbox/108048/