2011-07-24 58 views
1

我为创建从我的asp.net页面的PDF文件,其中包含嵌套radgrid控件控制以下验收标准:如何将我的ASP.NET页面转换为PDF?

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

  2. 在$(document).ready(...)时,使用JQuery更改了asp.net页面布局,这意味着不仅呈现的HTML应该转换为PDF,而且JavaScript必须运行它以在最终的PDF文件中进行所需的布局更改;例如列的路线等,我希望这将是可能的,否则...

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

请你能建议哪种工具可以在这种情况下提供帮助吗?

我下载并测试了EvoPdf工具,但它并不支持IE渲染引擎(仅FireFox渲染),并且无法使JavaScripts使其正确工作。

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

如果我找不到任何工具,以帮助上述情况,另一个可能的解决方案可能是只考虑使用客户端脚本的网页截图(不知道是否会是可能的),然后将其发送到服务器并最终将该图像转换为pdf。

非常感谢,

回答

0

winnovative做正是我需要的:)它使用IE渲染引擎不像EvoPdf。

我还没有来得及测试等工具。

感谢

1

你可以试试WebToPDF.NET

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

我得到了保护覆盖无效的HTML渲染(HtmlTextWriter的作家),并调用转换方法。现在的问题是,PDF不会以这种方式显示为弹出式窗口,只是在页面上呈现一些二进制信息。任何想法如何使它显示为一个弹出? –

+0

其实我不明白什么是二进制信息...我补充说,你应该得到呈现的asp.net页面的HTML代码,并将此代码转换为PDF。因此,您将获得PDF格式的流。进一步你可以用它来做任何你想要的。如果您希望它显示为弹出窗口,则将此流写入Response并将内容类型指定为“application/pdf” – zavolokas

0

EvoPdf是谁开发ExpertPDF(http://www.html-to-pdf.net/)同一个团队开发的。 ExpertPDF是老产品所以虽然API是几乎完全相同,EvoPDF API稍微更精致。

产品之间的主要区别是ExpertPDF使用本地IE呈现引擎。

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); 
    } 
} 
相关问题