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