1

我有以下接受标准,用于从包含嵌套 RadGrid 控件的 asp.net 页面创建 pdf 文件:

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

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

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

请您告知在这种情况下哪种工具可以提供帮助?

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

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

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

非常感谢,

4

5 回答 5

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,包括分页符、表单和链接。
于 2011-07-25T07:54:33.297 回答
0

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

如何在 ASP.net 中使用 wkhtmltopdf.exe

于 2011-07-24T19:08:40.297 回答
0

winnovative 正是我所需要的 :) 它使用 IE 渲染引擎,与 EvoPdf 不同。

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

谢谢

于 2011-07-25T13:04:54.880 回答
0

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

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

于 2011-09-06T11:17:28.817 回答
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);
    }
}
于 2014-08-30T09:31:24.453 回答