以C#编程方式生成HTML,定位打印报告

8 html c# reporting

我已经接管了一个能够打印信息的C#(2.0)代码库.执行此操作的代码非常繁琐.元素被绘制到每个页面上,魔术常量代表定位.我想程序员坐着一把尺子,通过测量和输入位置来设计每一页.是的,人们当然可以提出一些很好的抽象来使这种方法合理化.但我正在寻找一种不同的方法.

我的想法是,我将用生成静态HTML页面的代码替换当前打印的代码,将它们保存到文件中,然后在该文件上启动Web浏览器.最明显的好处是我不需要处理格式化 - 我可以让网络浏览器使用标签和CSS为我做这件事.

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

String.Format("<tr><td>{0}</td><td>{1}</td></tr>", foo, bar);
Run Code Online (Sandbox Code Playgroud)

而是采取这种感觉:

...
table().
    tr().
        td(foo).
        td(bar)
Run Code Online (Sandbox Code Playgroud)

或类似的东西.我见过其他语言的轻量级类,但是找不到C#的等价(或更好).我当然可以自己写,但我坚信不要重新发明轮子.

知道这样的事吗?知道什么比这更好吗?

Max*_*Max 1

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

我认为这种方法的主要好处是:

  • 将视图与业务逻辑分开
  • html模板可以由非C#开发人员编辑,html/css知识就足够了
  • 如果 html 发生变化,无需重新编译应用程序

我还没用过,但听说 Spark View Engine 还可以: http: //sparkviewengine.com/(但不确定是否适用于 C# 2.0)

不久前,我(在 PHP 中)尝试使用 Gagawa ( http://code.google.com/p/gakawa/ ),您可以在其中执行以下操作:

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

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

$div->appendChild( $link );
Run Code Online (Sandbox Code Playgroud)

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