Pull to refresh

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

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

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

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

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

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

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

Ссылка на GitHub.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.