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

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

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

Ответы [ 33 ]

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

Если вам действительно не нужна настоящая библиотека .Net PDF, существует множество бесплатных инструментов HTML в PDF , многие из которых могут запускаться из командной строки.

Одним из решений было бы выбрать один из них, а затем написать тонкую обертку вокруг этого в C #. Например, как в этом уроке .

4 голосов
/ 21 июня 2016

Ниже приведен пример преобразования html + css в PDF с использованием iTextSharp (iTextSharp + itextsharp.xmlworker)

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;


byte[] pdf; // result will be here

var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));

using (var memoryStream = new MemoryStream())
{
        var document = new Document(PageSize.A4, 50, 50, 60, 60);
        var writer = PdfWriter.GetInstance(document, memoryStream);
        document.Open();

        using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
        {
            using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
            }
        }

        document.Close();

        pdf = memoryStream.ToArray();
}
4 голосов
/ 29 декабря 2011

ABCpdf.NET (http://www.websupergoo.com/abcpdf-5.htm)

Мы используем и рекомендуем.

Очень хороший компонент, он не только конвертирует веб-страницу в PDF как изображение, но и действительно конвертирует текст, изображение, форматирование и т. Д. *

Это не бесплатно, но дешево.

3 голосов
/ 03 декабря 2016

Я нашел следующую библиотеку более эффективной для преобразования HTML в PDF.
nuget : https://www.nuget.org/packages/Select.HtmlToPdf/

3 голосов
/ 08 апреля 2010

PDF Vision - это хорошо. Тем не менее, вы должны иметь полное доверие, чтобы использовать его. Я уже написал по электронной почте и спросил, почему мой HTML не конвертировался на сервере, но он отлично работал на localhost.

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

Это зависит от любых других ваших требований.

Действительно простое, но нелегко разворачиваемое решение - использовать элемент управления WebBrowser для загрузки Html, а затем использовать метод печати Print для локально установленного PDF-принтера. Доступно несколько бесплатных PDF-принтеров, а элемент управления WebBrowser является частью .Net Framework.

EDIT: Если ваш Html является XHtml, вы можете использовать PDFizer для выполнения этой работы.

2 голосов
/ 08 мая 2009

Я тоже искал это некоторое время назад. Я столкнулся с HTMLDOC http://www.easysw.com/htmldoc/, который представляет собой бесплатное приложение командной строки с открытым исходным кодом, которое принимает файл HTML в качестве аргумента и выкладывает из него PDF-файл. Это хорошо сработало для моего сайд-проекта, но все зависит от того, что вам действительно нужно.

Компания, которая делает это, продает скомпилированные двоичные файлы, но вы можете свободно скачивать и компилировать из исходного кода и использовать его бесплатно. Мне удалось скомпилировать довольно недавнюю ревизию (для версии 1.9), и я собираюсь выпустить бинарный установщик для нее через несколько дней, поэтому, если вам интересно, я могу предоставить ссылку на нее, как только я опубликую ее. *

Редактировать (25.02.2014): похоже, документы и сайт перешли на http://www.msweet.org/projects.php?Z1

2 голосов
/ 14 ноября 2014

Вам нужно использовать коммерческую библиотеку, если вам нужен идеальный HTML-рендеринг в формате PDF.

ExpertPdf Html To Pdf Converter очень прост в использовании и поддерживает новейшие html5 / css3. Вы можете конвертировать весь URL в PDF:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);

или строка html:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);

У вас также есть возможность напрямую сохранить сгенерированный pdf-документ в поток файлов на диске.

2 голосов
/ 15 марта 2016

Я являюсь автором пакета Rotativa. Это позволяет создавать PDF-файлы непосредственно из бритвы:

https://www.nuget.org/packages/Rotativa/

Тривиально для использования, и вы имеете полный контроль над макетом, поскольку вы можете использовать бритвенные представления с данными из контейнера Model и ViewBag.

Я разработал версию SaaS для Azure. Это делает его еще проще использовать из WebApi или любого приложения .Net, службы, веб-сайта Azure, веб-задания Azure, независимо от того, что работает .Net.

http://www.rotativahq.com/

Доступны бесплатные аккаунты.

1 голос
/ 06 марта 2019

Это бесплатная библиотека и работает очень легко: OpenHtmlToPdf

string timeStampForPdfName = DateTime.Now.ToString("yyMMddHHmmssff");

string serverPath = System.Web.Hosting.HostingEnvironment.MapPath("~/FolderName");
string pdfSavePath = Path.Combine(@serverPath, "FileName" + timeStampForPdfName + ".FileExtension");


//OpenHtmlToPdf Library used for Performing PDF Conversion
var pdf = Pdf.From(HTML_String).Content();

//FOr writing to file from a ByteArray
 File.WriteAllBytes(pdfSavePath, pdf.ToArray()); // Requires System.Linq
...