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

前端之家收集整理的这篇文章主要介绍了Asp.net C的PDF或其他“报告查看器”选项#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我和我目前的项目绑定了.这是一个工资单应用程序,我正在使用C#开发ASP.net webforms.我的老板说,这个网站的理想功能是点击付款查询日期,打开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文件写入磁盘,而不是输出流,因此您需要稍微做一些,以使其适合您.

原文链接:https://www.f2er.com/aspnet/251025.html

猜你在找的asp.Net相关文章