C# 从原始HTML/CSS内容从ASP.NET生成PDF?
我发送的电子邮件附有发票作为PDF。我已经在应用程序的其他地方在.aspx页面中创建了发票。我想使用Server.Execute返回输出HTML并从中生成PDF。否则,我将不得不使用报告工具在PDF上“绘制”发票。这有很多原因,其中最重要的一个原因是我必须更新.aspx页面和报告中的每一个小改动。做什么…无法直接从.NET中的HTML字符串生成PDF,但有许多第三方控件可以很好地工作 我在这方面取得了成功: 这是: 要问的重要问题是:C# 从原始HTML/CSS内容从ASP.NET生成PDF?,c#,asp.net,html,pdf,C#,Asp.net,Html,Pdf,我发送的电子邮件附有发票作为PDF。我已经在应用程序的其他地方在.aspx页面中创建了发票。我想使用Server.Execute返回输出HTML并从中生成PDF。否则,我将不得不使用报告工具在PDF上“绘制”发票。这有很多原因,其中最重要的一个原因是我必须更新.aspx页面和报告中的每一个小改动。做什么…无法直接从.NET中的HTML字符串生成PDF,但有许多第三方控件可以很好地工作 我在这方面取得了成功: 这是: 要问的重要问题是: 与IE、FF和Safari/Chrome三大浏览器相比,它的
还有一些其他的,但它们处理ActiveX显示等等。只要您能够确保使用正确的XHTML,您也可以使用类似于通过XSLT/XSL-FO将XML(XHTML)转换为PDF的产品 掌握它需要一点学习曲线,但一旦你“掌握”了它,它就会非常有效
Marc我们使用了一种叫做ABCPDF的产品来实现这一点,它的效果非常好
这听起来像是一份工作。它可以采用HTML和CSS并生成PDF,然后您可以将其呈现给用户。它比大多数web浏览器更好地支持CSS3(工作人员包括CSS的发明者Håkon Wium Lie) 请参阅,尤其是维基百科页面,以了解它可以生成的漂亮输出。作者们也有一个有趣的故事
编辑:有一个可用的。由于您正在生成答案,您可以使用Report.NET之类的工具: 我不同意那些说你不能直接从输出转换成PDF的答案,但是,因为你可以“重新调用”页面,将HTML作为流并转换它。但是,我不确定您希望使用什么工具来实现这一点。换句话说,这是可能的,但我不确定它是否值得。PDF创建库,如Report.NET,即使它们强制重用一些逻辑,并且没有自动转换,也更容易 我没有尝试过这个组件,但我从那些尝试过的人那里听到了关于它的好消息。该模型更像HTML,但我不确定您是否可以简单地向其发送呈现的ASPX来创建PDF:
我会走另一条路。假设您使用的是SQL Server,请使用SSRS并以这种方式生成PDF。如果您试图通过GOOGLE找到一些html到PDF的软件,您将得到一堆这样的东西。 大约有10个领导者,但大多数领导者在后台模式下使用IE DLL。 其中只有两个使用自己的解析引擎。 如果希望以编程方式创建PDF,请尝试ASP.NET项目中的组件。 它是一个轻松生成PDF发票、报表的组件。是一个从html生成PDF的免费且酷的exe。它是用C++编写的。但是它是一个包装器dotnet库,用于这个很棒的工具。我使用这个dotnet库实现了它,它非常好,它可以自己完成所有事情,您只需要将html作为数据源
/// <summary>
/// Converts html into PDF using nReco dll and wkhtmltopdf.exe.
/// </summary>
private byte[] ConvertHtmlToPDF()
{
HtmlToPdfConverter nRecohtmltoPdfObj = new HtmlToPdfConverter();
nRecohtmltoPdfObj.Orientation = PageOrientation.Portrait;
nRecohtmltoPdfObj.PageFooterHtml = CreatePDFFooter();
nRecohtmltoPdfObj.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";
return nRecohtmltoPdfObj.GeneratePdf(CreatePDFScript() + ShowHtml() + "</body></html>");
}
//
///使用nReco dll和wkhtmltopdf.exe将html转换为PDF。
///
专用字节[]转换HTMLTOPDF()
{
HtmlToPdfConverter nRechtmlTopDFOBJ=新的HtmlToPdfConverter();
nRecothTMLTOPDFOBJ.Orientation=PageOrientation.Portrait;
nRecothTMLTOPDFOBJ.PageFooterHtml=CreatePdfooter();
nRECOTHTMLOTPDFOBJ.CustomWKHTMLAGS=“--页边距顶部35--页眉间距0--页边距左侧0--页边距右侧0”;
返回nRecothTMLTOPDFOBJ.generatePDDF(CreatePDFScript()+ShowHtml()+“”);
}
上面的函数是下面链接文章的摘录,详细解释了它。
最初的问题是关于将另一个包含发票的aspx页面转换为PDF文档。发票可能使用了一些会话数据,用户建议使用Server.Execute()获取发票页面HTML代码,然后将该代码转换为PDF。无法直接转换发票页面URL,因为转换期间将创建新会话,并且会话数据将丢失 这实际上是一种很好的技术,可以在转换过程中保留会话数据,这种技术在EvoPdf库中得到了应用。获取发票页面呈现的HTML字符串并将该字符串转换为PDF的完整C#代码为:
// Execute the invoice page and get the HTML string rendered by this page
TextWriter outTextWriter = new StringWriter();
Server.Execute("Invoice.aspx", outTextWriter);
string htmlStringToConvert = outTextWriter.ToString();
// Create a HTML to PDF converter object with default settings
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Use the current page URL as base URL
string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri;
// Convert the page HTML string to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, 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_Page_in_Same_Session.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();
使用Server.Execute()获取发票页面的HTML并使用将该代码转换为PDF的可能最低解决方案是:
您可以使用PDFSharp或iTextSharp将html转换为pdf。PDFSharp不是免费的。此产品看起来不错,但它的构建并不适合与.NET应用程序打包。看起来他们至少有一个可以包装的.dll。我不能说我已经尝试过了-我已经用MindTouch Deki使用过它,它直接调用.exe。我能说的是,输出是华丽的-它更像是来自Internet Explorer的LaTeX而不是CutePDF:)没有挖掘他们钉在每个文档第一页上的徽标付费版本的Prince没有徽标。3800美元的服务器许可证!站点许可证的可能副本:1170美元标准许可证:1美元,495@Junto:是的-所以-创建软件要花钱-所以这个工具不仅仅是免费的-但是有一个免费的Xml2Pdf工作站版本,too@marc-当然要花钱,但披露这是一个付费产品,从HTML内容生成PDF需要标准许可证也无妨。NReco.LT(用于.NET Core)是一个付费软件包,需要商业许可证
TextWriter outTextWriter = new StringWriter();
Server.Execute("Invoice.aspx", outTextWriter);
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(),
httpContext.Current.Request.Url.AbsoluteUri);