如何将我的ASP.NET页面转换为PDF?

时间:2011-07-24 18:55:24

标签: asp.net internet-explorer pdf abcpdf

我有一个从我的asp.net页面创建pdf文件的接受标准,该页面包含嵌套的RadGrid控件:

  1. 页面的当前视图应转换为PDF,这意味着应考虑当前页面请求的视图状态和会话信息。这让我只有一个选择;在发送新的pdf回发时,在当前会话的Page_Render()事件处理程序中进行PDF转换。

  2. 在$(document).ready(...)时使用JQuery更改了asp.net页面布局,这意味着不仅渲染的HTML应该转换为PDF而且javascripts也有运行它以在最终的PDF文件中进行所需的布局更改;例如列对齐等我希望否则可能......

  3. asp.net页面只能在IE 6+中正确显示,因此使用的PDF工具必须使用IE渲染引擎。

  4. 请问您可以建议在这种情况下哪种工具可以提供帮助?

    我下载并测试了EvoPdf工具,但它显然不支持IE渲染引擎(仅限FireFox渲染),并且无法使javascripts能够正常使用它。

    我要评估ABCPdf和Winnovetive,但我不确定他们会支持我想要的东西。

    如果我找不到任何工具来帮助解决上述问题,另一种可能的解决方案可能就是使用客户端脚本截取页面(不知道是否可能),然后将其发送到服务器并最后将该图像转换为pdf。

    非常感谢,

5 个答案:

答案 0 :(得分:1)

您可以尝试WebToPDF.NET

  1. 尝试转换在呈现asp.net页面后获得的HTML页面
  2. WebToPDF.NET支持JavaScript(和JQuery),所以不是问题
  3. WebToPDF.NET通过所有W3C测试(BIDI除外),并支持HTML 4.01,JavaScript,XHTML 1.0,XHTML 1.1和CSS 2.1,包括分页符,表单和链接。

答案 1 :(得分:0)

不完全了解您的要求,但请查看wkhtmltopdf

How to use wkhtmltopdf.exe in ASP.net

答案 2 :(得分:0)

winnovative完全符合我的要求:)它使用IE渲染引擎,与EvoPdf不同。

我没有时间测试其他工具。

由于

答案 3 :(得分:0)

EvoPdf由开发ExpertPDF的同一团队(http://www.html-to-pdf.net/)开发。 ExpertPDF是较旧的产品,因此尽管API几乎相同,但EvoPDF API稍微精确一些。

产品之间的主要区别在于ExpertPDF使用本地IE渲染引擎。

答案 4 :(得分:0)

Winnovative HTML to PDF Converter不使用IE作为渲染引擎。它与WebKit呈现兼容,不依赖于IE或任何其他第三方工具。

您可以转换当前HTML页面,覆盖ASP.NET页面的Render()方法,并捕获按页面呈现的HTML代码。您可以在Convert the Current HTML Page to PDF Demo中找到包含C#源代码的完整示例。

以下是此方法的相关源代码:

// 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);
    }
}