Конвертировать HTML в PDF в .NET - PullRequest
387 голосов
/ 19 февраля 2009

Я хочу создать PDF, передав содержимое HTML функции. Для этого я использовал iTextSharp, но он плохо работает, когда сталкивается с таблицами, а компоновка просто становится грязной.

Есть ли лучший способ?

Ответы [ 33 ]

182 голосов
/ 25 января 2010

Попробуйте wkhtmtopdf . Это лучший инструмент, который я нашел до сих пор.

Для .NET вы можете использовать эту небольшую библиотеку , чтобы легко вызывать утилиту командной строки wkhtmtopdf.

175 голосов
/ 11 августа 2015

РЕДАКТИРОВАТЬ: Новое предложение HTML-рендерер для PDF с использованием PdfSharp

(после попытки wkhtmltopdf и предложения избегать его)

HtmlRenderer.PdfSharp - это 100% полностью управляемый код C # , простой для использования, безопасный для потоков и, что наиболее важно FREE ( Новая лицензия BSD ) решение.

Использование

  1. Скачать HtmlRenderer.PdfSharp пакет nuget.
  2. Использовать пример метода.

    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 по следующим причинам.

  1. Прежде всего, wkhtmltopdf - это C ++, реализованный не на C #, и вы испытывают различные проблемы, встраивая его в ваш код C #, особенно при переключении между 32-битными и 64-битными сборками вашего проект. Пришлось попробовать несколько обходных путей, включая условные создание проекта и т. д. и т. п., чтобы избежать «недопустимых исключений формата» на разных машинах.
  2. Если вы управляете собственной виртуальной машиной, все в порядке. Но если ваш проект работает в ограниченной среде, например ( Azure (На самом деле это невозможно без лазури, как указано Вт. Автор статьи ), Elastic Beanstalk и т. Д.) - это кошмар, когда нужно настроить эту среду только для работы wkhtmltopdf.
  3. wkhtmltopdf создает файлы на вашем сервере, поэтому вы должны управлять разрешениями пользователей и предоставлять доступ на запись wkhtmltopdf запущен.
  4. Wkhtmltopdf работает как отдельное приложение, поэтому его нет управляемый вашим пулом приложений IIS . Таким образом, вы должны либо принять его как услуга на другом компьютере, или вы будете испытывать пики обработки и потребление памяти на вашем производстве сервер.
  5. Он использует временные файлы для создания PDF, а в случаях, как AWS EC2 , который имеет очень медленный дисковый ввод-вывод, это большая производительность проблема.
  6. Обнаружена наиболее ненавистная ошибка "Невозможно загрузить 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.

Кроме того, для реальных веб-приложений они также управляют безопасностью потоков и т. Д ...

29 голосов
/ 12 апреля 2011

Большинство конвертеров HTML в PDF использует IE для анализа и рендеринга HTML. Это может сломаться, когда пользователь обновляет свой IE. Здесь это тот, который не полагается на IE.

Код выглядит примерно так:

EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);

Как и многие другие конвертеры, вы можете передавать текст, имя файла или URL. Результат может быть сохранен в файл или поток.

27 голосов
/ 18 августа 2016

Я недавно выполнил PoC относительно преобразования HTML в PDF и хотел поделиться своими результатами.

Мой любимый - OpenHtmlToPdf

Преимущества этого инструмента:

  • Очень хорошая совместимость с HTML (например, это был единственный инструмент в моем примере, который правильно повторял заголовки таблиц, когда таблица занимала несколько страниц)
  • Свободный API
  • Бесплатно и с открытым кодом ( Лицензия Creative Commons Attribution 3.0 * )
  • Доступно через NuGet

Другие протестированные инструменты:

20 голосов
/ 23 апреля 2015

Я очень рекомендую NReco , серьезно. Он имеет бесплатную и платную версию, и действительно стоит того. Он использует wkhtmtopdf в фоновом режиме, но вам нужна только одна сборка. Фантастическая.

Пример использования:

Установка через NuGet .

var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);

Отказ от ответственности: я не разработчик, просто фанат проекта:)

13 голосов
/ 19 февраля 2009

Winnovative предлагает библиотеку .Net PDF, которая поддерживает ввод HTML. Они предлагают неограниченную бесплатную пробную версию . В зависимости от того, как вы хотите развернуть свой проект, этого может быть достаточно.

8 голосов
/ 17 ноября 2015

Основной PDF может использоваться для преобразования HTML в PDF : C # образец . Приведенный здесь пример основан на ASP.NET, но библиотеку можно использовать из Windows Forms, WPF, ASP.NET Webforms и ASP.NET MVC. Библиотека предлагает возможность использования различных механизмов рендеринга HTML: Internet Explorer (по умолчанию) и WebKit (лучший вывод).

Весь набор элементов управления предоставляется бесплатно (коммерческие приложения также) через программу Лицензия , если вы имеете на это право. Лицензия сообщества является полным продуктом без ограничений и водяных знаков.

Примечание: я работаю в Syncfusion.

7 голосов
/ 28 октября 2010

Существует также новое веб-приложение для создания документов - DocRaptor.com . Кажется простым в использовании, и есть бесплатный вариант.

7 голосов
/ 18 октября 2010

Я использовал ExpertPDF Html To Pdf Converter . Делает достойную работу. К сожалению, это не бесплатно.

6 голосов
/ 20 августа 2017

2018, и давайте использовать стандартное уравнение HTML + CSS = PDF!

Есть хорошие новости для требований HTML-PDF. Поскольку этот ответ показал , стандарт W3C css-break-3 , который решит проблему ... Это рекомендация кандидата с планом преобразования в окончательную рекомендацию в 2017 или 2018 году, после испытаний.

В качестве нестандартных решений существуют плагины для C #, как показано print-css.rocks .

...