我有一个从我的asp.net页面创建pdf文件的接受标准,该页面包含嵌套的RadGrid控件:
页面的当前视图应转换为PDF,这意味着应考虑当前页面请求的视图状态和会话信息。这让我只有一个选择;在发送新的pdf回发时,在当前会话的Page_Render()事件处理程序中进行PDF转换。
在$(document).ready(...)时使用JQuery更改了asp.net页面布局,这意味着不仅渲染的HTML应该转换为PDF而且javascripts也有运行它以在最终的PDF文件中进行所需的布局更改;例如列对齐等我希望否则可能......
asp.net页面只能在IE 6+中正确显示,因此使用的PDF工具必须使用IE渲染引擎。
请问您可以建议在这种情况下哪种工具可以提供帮助?
我下载并测试了EvoPdf工具,但它显然不支持IE渲染引擎(仅限FireFox渲染),并且无法使javascripts能够正常使用它。
我要评估ABCPdf和Winnovetive,但我不确定他们会支持我想要的东西。
如果我找不到任何工具来帮助解决上述问题,另一种可能的解决方案可能就是使用客户端脚本截取页面(不知道是否可能),然后将其发送到服务器并最后将该图像转换为pdf。
非常感谢,
答案 0 :(得分:1)
您可以尝试WebToPDF.NET。
答案 1 :(得分:0)
不完全了解您的要求,但请查看wkhtmltopdf
答案 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);
}
}