Я отправляю электронные письма, у которых есть счета-фактуры, прикрепленные как PDF файлы. Я уже - в другом месте приложения - создаю счета-фактуры на странице .aspx. Я хотел бы использовать Server.Execute, чтобы вернуть выходной HTML и сгенерировать PDF. В противном случае мне пришлось бы использовать инструмент отчетности для "рисования" счета в PDF файле. Это удар по множеству причин, не в последнюю очередь из-за того, что мне придется обновлять как .aspx-страницу, так и отчет для каждого незначительного изменения. Что делать...
Создавать PDF из ASP.NET из необработанного содержимого HTML/CSS?
Ответ 1
Невозможно создать PDF файл из строки HTML непосредственно в .NET, но есть несколько сторонних элементов управления, которые хорошо работают.
У меня был успех с этим: http://www.html-to-pdf.net и это: http://www.htmltopdfasp.net
Важные вопросы:
- Правильно ли он отображается по сравнению с 3 основными браузерами: IE, FF и Safari/Chrome?
- Он отлично справляется с CSS?
- Есть ли у элемента управления собственный механизм рендеринга? Если это так, отскакируйте. Вы не хотите доверять домашнему движку рендеринга - у браузеров есть достаточно сложная задача, чтобы все пикселы были идеальными.
- Какие зависимости требует контроль третьей стороны? Чем меньше, тем лучше.
Есть несколько других, но они имеют дело с дисплеями ActiveX и т.д.
Ответ 2
Для этого мы используем продукт ABCPDF, и он работает фантастически.
Ответ 3
Это звучит как работа для Prince. Он может принимать HTML и CSS и создавать PDF файл, который вы можете представить своим пользователям. Он поддерживает CSS3 лучше, чем большинство веб-браузеров (в штат входят Håkon Wium Lie, изобретатель CSS).
Смотрите samples, особенно те, что для страниц в Википедии, для красивого вывода, который он может сгенерировать. С авторами также есть интересный Google Tech Talk.
Изменить: Существует .NET wrapper.
Ответ 4
wkhtmltopdf - это бесплатный и классный exe для создания pdf файла из html. Его написано на С++. Но nReco htmltopdf - это оберточная библиотека dotnet для этого удивительного инструмента. Я реализовал эту библиотеку в dotnet, и было просто хорошо, что она делает все сама по себе, вам просто нужно предоставить html в качестве источника данных.
/// <summary>
/// Converts html into PDF using nReco dll and wkhtmltopdf.exe.
/// </summary>
private byte[] ConvertHtmlToPDF()
{
HtmlToPdfConverter nRecohtmltoPdfObj = new HtmlToPdfConverter();
nRecohtmltoPdfObj.Orientation = PageOrientation.Portrait;
nRecohtmltoPdfObj.PageFooterHtml = CreatePDFFooter();
nRecohtmltoPdfObj.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";
return nRecohtmltoPdfObj.GeneratePdf(CreatePDFScript() + ShowHtml() + "</body></html>");
}
Вышеприведенная функция является выдержкой из приведенного ниже сообщения ссылки, которое объясняет это подробно. HTML в PDF в ASP.Net
Ответ 5
Первоначальный вопрос заключается в преобразовании другой страницы aspx, содержащей счет-фактуру в документ PDF. Счет-фактура, вероятно, использует некоторые данные сеанса, и пользователь предлагает использовать Server.Execute() для получения кода HTML-страницы счета-фактуры, а затем для преобразования этого кода в PDF. Невозможно преобразовать URL страницы счета-фактуры, потому что во время преобразования будет создан новый сеанс, и данные сеанса будут потеряны.
Это действительно хороший способ сохранить данные сеанса во время преобразования, которые применяются в Преобразование HTML-страницы в PDF в той же сессии ASP.NET Demo библиотеки EvoPdf. Полный код С# для получения строки HTML, отображаемой на странице счета-фактуры, и для преобразования этой строки в PDF:
// Execute the invoice page and get the HTML string rendered by this page
TextWriter outTextWriter = new StringWriter();
Server.Execute("Invoice.aspx", outTextWriter);
string htmlStringToConvert = outTextWriter.ToString();
// Create a HTML to PDF converter object with default settings
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Use the current page URL as base URL
string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri;
// Convert the page HTML string to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl);
// Send the PDF as response to browser
// Set response content type
Response.AddHeader("Content-Type", "application/pdf");
// Instruct the browser to open the PDF file as an attachment or inline
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Convert_Page_in_Same_Session.pdf; size={0}", outPdfBuffer.Length.ToString()));
// Write the PDF document buffer to HTTP response
Response.BinaryWrite(outPdfBuffer);
// End the HTTP response and stop the current page processing
Response.End();
Ответ 6
Пока вы можете использовать правильный XHTML, вы также можете использовать продукт, например Alt-Soft Xml2PDF для преобразования XML ( XHTML) в PDF с помощью XSLT/XSL-FO.
Для освоения требуется немного учебной кривой, но она очень хорошо работает, как только вы ее получите!
Марк
Ответ 7
Поскольку вы создаете ответ, вы можете использовать такой инструмент, как Report.NET: http://sourceforge.net/projects/report/
Я не согласен с ответами, которые говорят, что вы не можете преобразовать непосредственно из вывода в PDF, однако, поскольку вы можете "повторно вызвать" страницу и получить HTML как поток и преобразовать его. Однако я не уверен, какой инструмент вы хотели бы использовать для этого. Другими словами, это возможно, но я не уверен, что это того стоит. Библиотеки создания PDF файлов, такие как Report.NET, даже при том, что они заставляют повторно использовать некоторую логику и нет автоматизированного преобразования, проще.
Я не пробовал этот компонент, но я слышал хорошие вещи об этом от тех, кто имеет. Модель больше похожа на HTML, но я не уверен, что вы можете просто отправить визуализированный ASPX для создания PDF: http://www.websupergoo.com/abcpdf-8.htm
Ответ 8
Если вы попытаетесь найти какое-нибудь программное обеспечение html to pdf через GOOGLE, вы получите кучу этого материала. Есть около 10 лидеров, но большинство из них используют IE dll в фоновом режиме. Только пара из них использует собственный механизм синтаксического анализа. Попробуйте компонент PDF Duo.NET в вашем проекте ASP.NET, если вы хотите создать PDF-программу. Это легкая составляющая для удобного создания PDF-обращений, отчетов, например.
Ответ 9
Я бы пошел другим путем. Предполагая, что вы используете SQL Server, используйте SSRS и создавайте PDF таким образом.
Ответ 10
Возможное минимальное решение для использования Server.Execute() для получения HTML-страницы счета-фактуры и преобразования этого кода в PDF с помощью winnovative html to pdf api для .net:
TextWriter outTextWriter = new StringWriter();
Server.Execute("Invoice.aspx", outTextWriter);
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(),
httpContext.Current.Request.Url.AbsoluteUri);
Ответ 11
Вы можете использовать PDFSharp или iTextSharp для преобразования html в pdf. PDFSharp не является бесплатным.