Asp.net C的PDF或其他“报告查看器”选项#

我和我目前的项目绑定了。 这是一个工资单应用程序,我正在使用C#开发ASP.net webforms。 我的老板说,这个网站的理想function是点击付款查询日期,打开PDF并显示薪水支票信息。 我已经做了几天的研究,试图找到最好的解决方案。 到目前为止,我没有运气。 我发现了一些不同的东西,比如iTextSharp,但一年的许可证现在太贵了。 我也看过基于php的tcpdf。 我还研究过CrystalReports和Active Reports。 购买许可证也太贵了。 我也研究过XML到PDF解决方案,但我找不到任何确定的东西。 由于我对软件开发的商业世界很陌生,并且没有高级开发人员可以依赖,所以我几乎已经死了。 我知道我们将从基于DOS的应用程序中将薪水下载到CSV文件中,该应用程序执行我们的时钟输入和输出。 然后,我将CSV文件导入SQL Server 2012 Express。 非常感谢您的想法,因为我不知道从哪里开始! 先感谢您!

我最近发现的HTML到PDF转换器是WKHTMLtoPDF

它是开源的,并使用WebKit将HTML转换为PDF,因此它符合标准。

您可以如何使用它的一个例子是

using (var pdfStream = new FileStream(dlg.FileName, FileMode.OpenOrCreate)) { // pass in the HTML you want to appear in the PDF, and the file stream it writes to Printer.GeneratePdf(htmlStream, pdfStream); } 

其中GeneratePdf定义为

  public static void GeneratePdf(Stream html, Stream pdf) { Process process; StreamWriter stdin; var psi = new ProcessStartInfo(); psi.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Lib", "wkhtmltopdf.exe"); psi.WorkingDirectory = Path.GetDirectoryName(psi.FileName); // run the conversion utility psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.Arguments = "-q -n --disable-smart-shrinking - -"; process = Process.Start(psi); try { stdin = process.StandardInput; stdin.AutoFlush = true; //stdin.Write(html.ReadToEnd()); stdin.Write(new StreamReader(html).ReadToEnd()); stdin.Dispose(); process.StandardOutput.BaseStream.CopyTo(pdf); process.StandardOutput.Close(); pdf.Position = 0; process.WaitForExit(10000); } catch (Exception ex) { throw ex; } finally { process.Dispose(); } } 

在您的情况下,您不是将其写入文件流,而是将其作为PDF写入HTTP输出流。

但请注意,此示例更适合将PDF文件写入磁盘,而不是输出流,因此您需要稍微做一些,以使其适合您。

我同意html – > pdf是现在最好的选择,如果你想渲染复杂的报告并保持高效。

我已经为html – > pdf转换实现了一个名为jsreport的包装器。

如果您使用的是asp.net mvc,可以查看我在Asp.Net MVC视图中渲染pdf的post,或者在c#中 查看更多通用的Pdf报告 。

免责声明:我是jsreport的作者