【问题标题】:PDF or Other "report viewer" options for Asp.net C#用于 Asp.net C# 的 PDF 或其他“报告查看器”选项
【发布时间】:2013-09-17 00:16:30
【问题描述】:

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

【问题讨论】:

  • 如果您买不起 PDF 库,请将您的报告输出为 HTML,并包含 CSS 打印样式表以使它们打印得很好。
  • @Humpy - 看看 PDFSharp,pdfsharp.com
  • 我对 PDFSharp 的体验是它过于细化,即您需要对 PDF 的布局过于具体,而且速度非常慢。最好使用 HTML -> PDF 转换器,例如 WKHTMLtoPDF
  • @Humpy 您是否检查过 SQL Server Reporting Services (SSRS)。您可以在服务器中托管您的报告,并且可以选择导出到 Excel、Pdf 或 CSV。它附带 SQL Server 安装和 Visual Studio(商业智能)帮助您编辑它
  • @RohithNair 我也没有调查过。但我很快就会这样做!谢谢你的想法!

标签: c# asp.net sql-server pdf


【解决方案1】:

我最近发现的 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。基本上,您单击日期,链接指向 ASPX 页面,对页面进行编码以生成 HTML,将该 HTML 传递给 PDF 生成器,然后将该 PDF Response.Write() 返回给用户。然后,您还可以选择在浏览器中向用户显示 Check。
【解决方案2】:

我也同意 html -> pdf 是当今最好的选择,如果您想呈现复杂的报告并保持高效。

我已经为 html -> pdf 转换实现了一个包装器,名为 jsreport

如果您使用的是 asp.net mvc,可以查看我的帖子 Rendering pdf from Asp.Net MVC views 或更通用的帖子 Pdf reports in c#

免责声明:我是jsreport的作者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2011-01-12
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多