我正在发送附有PDF发票的电子邮件。我已经 - 在应用程序的其他地方 - 在.aspx页面中创建发票。我想使用Server.Execute返回输出HTML并从中生成PDF。否则,我必须使用报告工具在PDF上“绘制”发票。这有很多原因,其中最重要的原因是,我必须更新.aspx页面和报告,以便进行每次微小的更改。怎么做......
答案 0 :(得分:5)
无法直接在.NET中从HTML字符串生成PDF,但有许多第三方控件可以正常运行。
我在这个方面取得了成功:http://www.html-to-pdf.net 而这:http://www.htmltopdfasp.net
要问的重要问题是:
还有其他几个,但他们处理ActiveX显示等。
答案 1 :(得分:3)
我们使用一种名为ABCPDF的产品,效果非常好。
答案 2 :(得分:2)
这听起来像是Prince的工作。它可以使用HTML和CSS并生成PDF,然后您可以将其呈现给您的用户。它比大多数Web浏览器更好地支持CSS3(工作人员包括CSS的发明者HåkonWiumLie)。
请参阅samples,尤其是维基百科页面的内容,了解它可以生成的精美输出。作者也有一个有趣的Google Tech Talk。
修改: 有.NET wrapper可用。
答案 3 :(得分:2)
wkhtmltopdf是一个免费且很酷的exe,可以从html生成pdf。它用c ++编写。但是nReco htmltopdf是这个很棒的工具的包装网络库。我实现了使用这个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>");
}
上述功能摘自下面的链接帖子,详细解释了它。 HTML to PDF in ASP.Net
答案 4 :(得分:2)
最初的问题是将包含发票的另一个aspx页面转换为PDF文档。发票可能正在使用某些会话数据,并且用户建议使用 Server.Execute() 来获取发票页面HTML代码,然后将该代码转换为PDF。无法直接转换发票页面URL,因为在转换期间将创建新会话并且会话数据将丢失。
这实际上是一种在转换期间保留会话数据的好方法,该方法应用于EvoPdf库的Convert a HTML Page to PDF in Same Session ASP.NET Demo。获取发票页面呈现的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();
答案 5 :(得分:1)
只要您确保使用正确的XHTML,您还可以使用Alt-Soft's Xml2PDF之类的产品通过XSLT / XSL-FO将XML(XHTML)转换为PDF。
要掌握一点学习曲线,但一旦你“掌握”它就会很好用!
马克
答案 6 :(得分:1)
由于您正在制作答案,您可以使用Report.NET之类的工具: http://sourceforge.net/projects/report/
我不同意那些说你无法直接从输出转换为PDF的答案,但是,因为你可以“重新调用”页面并将HTML作为流并转换它。但是,我不确定你想用什么工具来做这件事。换句话说,它是可能的,但我不确定它是否值得。 PDF创建库,如Report.NET,即使它们强制重用某些逻辑而没有自动转换,也更容易。
我没有尝试过这个组件,但是我从那些拥有它的人那里听到了很多好消息。该模型更像HTML,但我不确定您是否可以简单地将渲染的ASPX发送到它来创建PDF: http://www.websupergoo.com/abcpdf-8.htm
答案 7 :(得分:1)
如果你试图通过 GOOGLE 找到一些html到pdf软件,你会得到一堆这样的东西。 大约有10位领导者,但他们中的大多数都在后台模式中使用IE dll。 只有几个人使用他们自己的解析引擎。 如果您希望创建PDF程序,请在ASP.NET项目中尝试PDF Duo .NET组件。 例如,它是用于冷却生成PDF调用的轻量级组件。
答案 8 :(得分:0)
我会走另一条路。假设您使用的是SQL Server,请使用SSRS并以此方式生成PDF。
答案 9 :(得分:0)
使用Server.Execute()获取发票页面的HTML并使用winnovative html to pdf api for .net将该代码转换为PDF的可能最小解决方案是:
TextWriter outTextWriter = new StringWriter();
Server.Execute("Invoice.aspx", outTextWriter);
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(),
httpContext.Current.Request.Url.AbsoluteUri);
答案 10 :(得分:0)
您可以使用PDFSharp或iTextSharp将html转换为pdf。 PDFSharp不是免费的。