Создать PDF из ASP.NET из необработанного содержимого HTML / CSS? - PullRequest
10 голосов
/ 20 февраля 2009

Я отправляю электронные письма со счетами в формате PDF. Я уже - в другом месте приложения - создаю счета на странице .aspx. Я хотел бы использовать Server.Execute для возврата выходного HTML и создания PDF из этого. В противном случае мне пришлось бы использовать инструмент отчетности, чтобы «нарисовать» счет в PDF. Это дует по многим причинам, не в последнюю очередь из-за того, что мне придется обновлять страницу .aspx и отчет для каждого незначительного изменения. Что делать ...

Ответы [ 11 ]

5 голосов
/ 20 февраля 2009

Невозможно сгенерировать PDF из строки HTML непосредственно в .NET, но есть ряд сторонних элементов управления, которые хорошо работают.

У меня был успех с этим: http://www.html -to-pdf.net и это: http://www.htmltopdfasp.net

Важные вопросы:

  1. Правильно ли он отображается по сравнению с 3 основными браузерами: IE, FF и Safari / Chrome?
  2. Отлично ли справляется CSS?
  3. Есть ли у элемента управления собственный движок рендеринга? Если это так, отказов это. Вы не хотите доверять самодельному движку рендеринга - у браузеров достаточно сложная проблема с получением идеального пикселя.
  4. Какие зависимости требуется от стороннего контроля? Чем меньше, тем лучше.

Есть несколько других, но они имеют дело с дисплеями ActiveX и тому подобным.

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

Мы используем для этого продукт под названием ABCPDF, и он отлично работает.

http://www.websupergoo.com/abcpdf-1.htm

2 голосов
/ 22 сентября 2016

Первоначальный вопрос касается преобразования другой страницы aspx, содержащей счет, в документ PDF. Счет-фактура, вероятно, использует некоторые данные сеанса, и пользователь предлагает использовать Server.Execute () , чтобы получить HTML-код страницы счета-фактуры, а затем преобразовать этот код в PDF. Непосредственное преобразование URL-адреса страницы счета-фактуры невозможно, поскольку во время преобразования будет создан новый сеанс, а данные сеанса будут потеряны.

На самом деле это хороший метод для сохранения данных сеанса во время преобразования, который применяется в Преобразование HTML-страницы в PDF в том же сеансе ASP.NET Demo библиотеки EvoPdf. Полный код C # для получения строки 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();
2 голосов
/ 09 марта 2015

wkhtmltopdf - это бесплатная и полезная программа для создания PDF-файлов из HTML. Его написано на C ++. Но nReco htmltopdf - это библиотека-оболочка для этого замечательного инструмента. Я реализовал, используя эту библиотеку 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

2 голосов
/ 20 февраля 2009

Звучит как работа для Принц . Он может использовать HTML и CSS и генерировать PDF, который вы затем можете представить своим пользователям. Он поддерживает CSS3 лучше, чем большинство веб-браузеров (среди сотрудников Håkon Wium Lie, изобретатель CSS).

См. примеров , особенно те, что на страницах Википедии, для прекрасного вывода, который он может генерировать. Также есть интересная Google Tech Talk с авторами.

Редактировать: Доступна оболочка .NET .

1 голос
/ 04 октября 2009

Если вы попытаетесь найти программное обеспечение html в pdf через GOOGLE , вы получите кучу этого материала. Есть около 10 лидеров, но большинство из них используют библиотеки DLL в фоновом режиме. Просто пара из них использует свой собственный механизм разбора. Попробуйте PDF Duo .NET компонент в вашем проекте ASP.NET, если вы хотите создать PDF-файл программно. Это легкий компонент для создания PDF-отчетов, например,

1 голос
/ 21 февраля 2009

Поскольку вы создаете ответ, вы можете использовать такой инструмент, как Report.NET: http://sourceforge.net/projects/report/

Я не согласен с ответами, в которых говорится, что вы не можете напрямую преобразовать выходные данные в PDF, поскольку вы можете «повторно вызвать» страницу и получить HTML-код в виде потока и преобразовать его. Однако я не уверен, какой инструмент вы бы хотели использовать для этого. Другими словами, это возможно, но я не уверен, что оно того стоит. Создание PDF-файлов, как и Report.NET, даже несмотря на то, что они заставляют повторно использовать некоторую логику, а не автоматическое преобразование, делает это проще.

Я не пробовал этот компонент, но слышал о нем хорошие отзывы от тех, кто это сделал. Модель больше похожа на HTML, но я не уверен, что вы можете просто отправить обработанный ASPX для создания PDF: http://www.websupergoo.com/abcpdf-8.htm

1 голос
/ 20 февраля 2009

Пока вы можете быть уверены, что используете правильный XHTML, вы также можете использовать такой продукт, как Xml2PDF от Alt-Soft для преобразования XML (XHTML) в PDF с помощью XSLT / XSL-FO.

Требуется немного кривой обучения, чтобы освоить, но она очень хорошо работает, как только вы ее получили!

Марк

0 голосов
/ 06 октября 2016

Вы можете использовать PDFSharp или iTextSharp для преобразования html в pdf. PDFSharp не является бесплатным.

0 голосов
/ 06 октября 2016

Возможное минимальное решение использовать Server.Execute () для получения HTML-кода страницы счета и преобразования этого кода в PDF с использованием winnovative html в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...