kag*_*los 8 c# pdf-generation report xlsx asp.net-mvc-5
我正在开发一个MVC5 Web应用程序,我需要从任何数据库表生成报告.用户将选择他想要打印的表,然后选择要包含在报告中的列,系统应该只显示包含数据的网格(表).
在HTML表格中显示数据当然不是问题,我还设法生成包含用户可以下载的数据的Excel文件.
但是,我还需要提供报告的可打印形式,例如PDF或其他不需要特殊软件(如MS Office)的格式来打开和打印.
起初我以为我应该去ReportViewer控件,但问题是我的报告是动态的,因为用户选择了他需要的列.我已经看到其他人尝试生成报告定义文件,但我希望不那么难看.
有没有办法获取一个HTML表,它可以很好地计算单元格的大小,并从中创建PDF?如果列太多,我当然不介意在多个页面中水平拆分报表.
小智 2
你可以试试斯巴达克斯。
它是一个相对较新的 .NET 库,完全用 C# 编写。它可以连接到许多不同的数据库并生成 Excel 和 PDF 格式的报告。
我在 Google Drive 中上传了 3 个文件:
为了使用Spartacus,您需要引用System.Data和System.Xml包,以及Spartacus.dll。
在以下示例中,我通过简单的步骤从 template.xml 创建了 report.pdf:
Spartacus.Database.Generic v_database;
Spartacus.Reporting.Report v_report;
System.Data.DataTable v_table;
v_database = new Spartacus.Database.Postgresql("127.0.0.1", "database", "postgres", "password");
v_table = v_database.Query(
"select 'Example of Report made with Spartacus' as title, " +
" product, " +
" description, " +
" unit, " +
" quantity, " +
" total_cost, " +
" unit_cost " +
"from table", "REPORT");
v_report = new Spartacus.Reporting.Report(1, "template.xml", v_table);
v_report.Execute();
v_report.Save("report.pdf");
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要使用 Spartacus.Database 对象。如果您可以通过其他方式获取System.Data.DataTable,那么您可以将其传递给Report对象。
然而,有一个问题。正如您在 XML 模板中看到的,对于每一列,您需要知道:
填充和类型至关重要,您可能需要保留有关所有列的信息。如果这太难实现,并且您只能获取列名称和类型,则可以仅根据类型计算近似值,如下所示:
所有默认填充的总和为 30+30+30+15+15+15 = 135,大于 100。因此您可以标准化为 100,如下所示:
之后,您将需要生成包含动态字段信息的动态 template.xml 文件。
免责声明:我是斯巴达克斯的创建者和维护者。