2

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

4

2 回答 2

2

我最近发现的 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 文件写入磁盘,而不是输出流,因此您需要稍作不同的操作才能使其适合您。

于 2013-09-12T14:47:01.243 回答
0

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

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

如果您使用的是 asp.net mvc,您可以从 Asp.Net MVC 视图中查看我的帖子 Rendering pdf或在 c# 中查看更通用的帖子Pdf 报告。

免责声明:我是jsreport的作者

于 2014-04-20T19:38:55.023 回答