ASP.Net中的动态表格数据报告

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 模板中看到的,对于每一列,您需要知道:

  • 列名(显然)
  • 标题
  • 对齐(左对齐、右对齐或中心对齐)
  • 填充(百分比,100 为页面总宽度减去边距宽度)
  • 类型(整数、实数、布尔值、字符、日期或字符串)

填充和类型至关重要,您可能需要保留有关所有列的信息。如果这太难实现,并且您只能获取列名称和类型,则可以仅根据类型计算近似值,如下所示:

  • 产品类型为 STRING,默认填充 = 30
  • 描述是STRING类型,默认填充= 30
  • 单位为STRING类型,默认填充= 30
  • 数量为 REAL 类型,默认填充 = 15
  • Total_cost类型为 REAL,默认 fill = 15
  • unit_cost类型为 REAL,默认 fill = 15

所有默认填充的总和为 30+30+30+15+15+15 = 135,大于 100。因此您可以标准化为 100,如下所示:

  • 列填充 = 列默认填充 *(默认填充总和 / 100)

之后,您将需要生成包含动态字段信息的动态 template.xml 文件。

免责声明:我是斯巴达克斯的创建者和维护者。