РЕДАКТИРОВАТЬ: Новое предложение
HTML-рендерер для PDF с использованием PdfSharp
(после попытки wkhtmltopdf и предложения избегать его)
HtmlRenderer.PdfSharp - это 100% полностью управляемый код C # , простой для использования, безопасный для потоков и, что наиболее важно FREE ( Новая лицензия BSD ) решение.
Использование
- Скачать HtmlRenderer.PdfSharp пакет nuget.
Использовать пример метода.
public static Byte[] PdfSharpConvert(String html)
{
Byte[] res = null;
using (MemoryStream ms = new MemoryStream())
{
var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4);
pdf.Save(ms);
res = ms.ToArray();
}
return res;
}
Очень хорошая альтернатива * Бесплатная версия из iTextSharp
До версии 4.1.6 iTextSharp был лицензирован по лицензии LGPL, и версии до 4.16 (или могут быть также вилки) доступны в виде пакетов и могут свободно использоваться. Конечно, кто-то может использовать платную 5+ платную версию .
Я пытался интегрировать решения wkhtmltopdf в свой проект, и у меня было множество препятствий.
Лично я бы избегал использования решений на основе wkhtmltopdf в приложениях Hosted Enterprise по следующим причинам.
- Прежде всего, wkhtmltopdf - это C ++, реализованный не на C #, и вы
испытывают различные проблемы, встраивая его в ваш код C #,
особенно при переключении между 32-битными и 64-битными сборками вашего
проект. Пришлось попробовать несколько обходных путей, включая условные
создание проекта и т. д. и т. п., чтобы избежать «недопустимых исключений формата»
на разных машинах.
- Если вы управляете собственной виртуальной машиной, все в порядке. Но если ваш проект
работает в ограниченной среде, например ( Azure
(На самом деле это невозможно без лазури, как указано
Вт. Автор статьи ),
Elastic Beanstalk и т. Д.) - это кошмар, когда нужно настроить эту среду только для работы wkhtmltopdf.
- wkhtmltopdf создает файлы на вашем сервере, поэтому вы должны
управлять разрешениями пользователей и предоставлять доступ на запись
wkhtmltopdf запущен.
- Wkhtmltopdf работает как отдельное приложение, поэтому его нет
управляемый вашим пулом приложений IIS . Таким образом, вы должны либо принять его
как услуга на другом компьютере, или вы будете испытывать пики обработки и потребление памяти на вашем производстве
сервер.
- Он использует временные файлы для создания PDF, а в случаях, как AWS
EC2 , который имеет очень медленный дисковый ввод-вывод, это большая производительность
проблема.
- Обнаружена наиболее ненавистная ошибка "Невозможно загрузить DLL 'wkhtmltox.dll'"
многими пользователями.
--- PRE Edit Section ---
Для тех, кто хочет генерировать pdf из html в более простых приложениях / средах, я оставляю свой старый пост в качестве предложения.
Вт.Печкин
https://www.nuget.org/packages/TuesPechkin/
или специально для MVC Веб-приложений
(но я думаю, что вы можете использовать его в любом приложении .net)
Rotativa
https://www.nuget.org/packages/Rotativa/
Они оба используют
wkhtmtopdf двоичный файл для преобразования html в pdf. Который использует движок webkit для рендеринга страниц, поэтому он также может анализировать css таблиц стилей .
Они обеспечивают простую в использовании бесшовную интеграцию с C #.
Rotativa также может генерировать напрямую PDF-файлы из любого Razor View.
Кроме того, для реальных веб-приложений они также управляют безопасностью потоков и т. Д ...