在C#中以编程方式生成HTML,以打印报告为目标

在C#中以编程方式生成HTML,以打印报告为目标,c#,html,reporting,C#,Html,Reporting,我已经接管了一个C#(2.0)代码库,它能够打印信息。实现这一点的代码极其乏味。元素被绘制到每个页面上,其中魔法常量表示位置。我想象程序员拿着尺子坐着,通过测量和输入位置来设计每一页。是的,我们当然可以想出一些很好的抽象来使这种方法合理化。但我正在寻找一种不同的方法 我的想法是用生成静态HTML页面的代码替换当前打印的代码,将它们保存到文件中,然后在该文件上启动web浏览器。最明显的好处是,我不必处理格式问题——我可以让web浏览器通过标记和CSS为我处理格式问题 所以我要找的是一组非常轻量级的

我已经接管了一个C#(2.0)代码库,它能够打印信息。实现这一点的代码极其乏味。元素被绘制到每个页面上,其中魔法常量表示位置。我想象程序员拿着尺子坐着,通过测量和输入位置来设计每一页。是的,我们当然可以想出一些很好的抽象来使这种方法合理化。但我正在寻找一种不同的方法

我的想法是用生成静态HTML页面的代码替换当前打印的代码,将它们保存到文件中,然后在该文件上启动web浏览器。最明显的好处是,我不必处理格式问题——我可以让web浏览器通过标记和CSS为我处理格式问题

所以我要找的是一组非常轻量级的类,我可以用它们来帮助生成HTML。我不需要像HTMLTextWriter这样重量级的东西。我要寻找的是避免出现这样的碎片:

String.Format("<tr><td>{0}</td><td>{1}</td></tr>", foo, bar);
或者类似的。我在其他语言中也见过类似的轻量级类,但在C#中找不到等价的(或更好的)。我当然可以自己写,但我坚信不要重新发明轮子


你知道这样的事吗?知道比这更好的吗?

只是一个想法:为什么要在应用程序代码中组装HTML?听起来有点乏味。您可以聚合报表所需的数据,并将其传递给C#现有的一个模板引擎(通常用于web应用程序)。然后将模板引擎的结果保存到html文件中

我看到这种方法的主要好处:

  • 将视图与业务逻辑分离
  • html模板可以由非C开发者编辑,html/css知识就足够了
  • 如果html发生更改,则无需重新编译应用程序
我还没有用过它,但我听说Spark View引擎还可以:(但不确定它是否适用于C#2.0)

不久前,我(在PHP中)使用Gagawa()进行了实验,您可以在其中执行以下操作:

$div = new Div();
$div->setId("mydiv")->setCSSClass("myclass");

$link = new A();
$link->setHref("http://www.example.com")->setTarget("_blank");

$div->appendChild( $link );

但是很快放弃了这种方法,转而使用模板引擎。

另一种方法是将数据转换为XML并应用XSL样式表。为了改变HTML格式,您只需要替换样式表

$div = new Div();
$div->setId("mydiv")->setCSSClass("myclass");

$link = new A();
$link->setHref("http://www.example.com")->setTarget("_blank");

$div->appendChild( $link );