Как конвертировать мою страницу ASP.NET в PDF? - PullRequest
1 голос
/ 24 июля 2011

У меня есть следующие критерии приемлемости для создания файла PDF на моей странице asp.net, которая содержит вложенные элементы управления RadGrid:

  1. Текущий вид страницы должен быть преобразован в PDF, что означает, что необходимо учитывать состояние просмотра и информацию о сеансе текущего запроса страницы. Это оставляет мне только один вариант; выполнить преобразование PDF в обработчике события Page_Render () текущего сеанса при отправке новой обратной передачи в формате PDF.

  2. Макет страницы asp.net изменяется с помощью JQuery во время $ (document) .ready (...), что означает, что не только визуализированный HTML должен быть конвертирован в PDF, но и JavaScript имеют запустить на нем, чтобы получить желаемые изменения макета в конечном файле PDF; например выравнивание столбцов и т. д. Я надеюсь, что это было бы возможно в противном случае ...

  3. Страница asp.net правильно отображается только в IE 6+, поэтому используемый инструмент PDF должен использовать механизм рендеринга IE.

Не могли бы вы порекомендовать, какой инструмент может помочь в таком сценарии?

Я скачал и протестировал инструмент EvoPdf, но он, по-видимому, не поддерживает движок рендеринга IE (только рендеринг FireFox) и не мог заставить JavaScript работать с ним корректно.

Я собираюсь оценить ABCPdf и Winnovetive, но я не уверен, что они поддержат то, что я хочу.

Если бы я не смог найти никакого инструмента, помогающего с вышеизложенным, другим возможным решением могло бы быть просто сделать снимок экрана страницы с помощью клиентского скрипта (не знаю, будет ли это возможно), затем отправить его на сервер и наконец, преобразовав это изображение в pdf.

Большое спасибо,

Ответы [ 5 ]

1 голос
/ 25 июля 2011

Вы можете попробовать WebToPDF.NET .

  1. Попробуйте преобразовать HTML-страницу, полученную после отображения страницы asp.net
  2. WebToPDF.NET поддерживает JavaScript (и JQuery), поэтому это не проблема
  3. WebToPDF.NET проходит все тесты W3C (кроме BIDI) и поддерживает HTML 4.01, JavaScript, XHTML 1.0, XHTML 1.1 и CSS 2.1, включая разрывы страниц, формы и ссылки.
0 голосов
/ 30 августа 2014

Winnovative HTML to PDF Converter не использует IE в качестве движка рендеринга.Он совместим с рендерингом WebKit и не зависит от IE или любых других сторонних инструментов.

Вы можете конвертировать текущую HTML-страницу, переопределяя метод Render () страницы ASP.NET, и захватывать код HTML.отображается страницей.Вы можете найти полный пример с исходным кодом C # в Преобразование текущей HTML-страницы в демонстрационный файл PDF .

Вот соответствующий исходный код для этого подхода:

// Controls if the current HTML page will be rendered to PDF or as a normal page
bool convertToPdf = false;

protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // The current ASP.NET page will be rendered to PDF when its Render method will be called by framework
    convertToPdf = true;
}

protected override void Render(HtmlTextWriter writer)
{
    if (convertToPdf)
    {
        // Get the current page HTML string by rendering into a TextWriter object
        TextWriter outTextWriter = new StringWriter();
        HtmlTextWriter outHtmlTextWriter = new HtmlTextWriter(outTextWriter);
        base.Render(outHtmlTextWriter);

        // Obtain the current page HTML string
        string currentPageHtmlString = outTextWriter.ToString();

        // Create a HTML to PDF converter object with default settings
        HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

        // Set license key received after purchase to use the converter in licensed mode
        // Leave it not set to use the converter in demo mode
        htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og=";

        // Use the current page URL as base URL
        string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri;

        // Convert the current page HTML string a PDF document in a memory buffer
        byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(currentPageHtmlString, 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_Current_Page.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();
    }
    else
    {
        base.Render(writer);
    }
}
0 голосов
/ 06 сентября 2011

EvoPdf разработан той же командой, которая разрабатывает ExpertPDF (http://www.html -to-pdf.net /).ExpertPDF является более старым продуктом, поэтому, хотя API-интерфейсы практически идентичны, API-интерфейс EvoPDF немного более усовершенствован.

Основное различие между продуктами заключается в том, что ExpertPDF использует локальный механизм визуализации IE.

0 голосов
/ 25 июля 2011

winnovative сделал именно то, что мне нужно :) он использует движок рендеринга IE в отличие от EvoPdf.

У меня не было времени на тестирование других инструментов.

Спасибо

0 голосов
/ 24 июля 2011

Не знаю точно о ваших требованиях, но посмотрите на wkhtmltopdf

Как использовать wkhtmltopdf.exe в ASP.net

...