2010-06-05 12 views
8

He tomado una base de código C# (2.0) que tiene la capacidad de imprimir información. El código para hacer esto es terriblemente tedioso. Los elementos se dibujan en cada página, con constantes mágicas que representan el posicionamiento. Imagino al programador sentado con una regla, diseñando cada página midiendo y escribiendo en las posiciones. Y sí, uno podría encontrar algunas buenas abstracciones para hacer que este enfoque sea racional. Pero estoy buscando un método diferente.Generando HTML programáticamente en C#, Targeting Printed Reports

La idea es que reemplace el código actual que imprime con código que genera páginas HTML estáticas, las guarda en un archivo y luego inicia el navegador web en ese archivo. El beneficio más obvio es que no tengo que lidiar con el formato. Puedo permitir que el navegador web lo haga por mí con etiquetas y CSS.

Así que lo que estoy buscando es un conjunto de clases muy livianas que puedo usar para ayudar a generar HTML. No necesito nada tan pesado como HTMLTextWriter. Lo que estoy buscando es algo a evitar fragmentos de esta manera:

String.Format("<tr><td>{0}</td><td>{1}</td></tr>", foo, bar); 

Y en vez tome tener este tipo de sensación:

... 
table(). 
    tr(). 
     td(foo). 
     td(bar) 

O algo por el estilo. He visto clases ligeras como esa para otros idiomas pero no puedo encontrar el equivalente (o mejor) para C#. Ciertamente puedo escribirlo yo mismo, pero soy un firme creyente en no reinventar las ruedas.

¿Sabe algo como esto? ¿Sabe algo mejor que esto?

Respuesta

1

Solo como una idea: ¿por qué quieres ensamblar el código HTML en tu aplicación? Me suena un poco tedioso. Puede agregar los datos necesarios para el informe y pasarlos a uno de los motores de plantilla (que se utilizan "normalmente" para aplicaciones web) para C#. Luego guarda el resultado del motor de la plantilla en un archivo html.

Los principales beneficios que veo con este enfoque:

  • separa vista desde la lógica de negocio
  • plantillas HTML pueden ser editados por no desarrolladores de C#, el conocimiento de HTML/CSS es suficiente
  • hay necesidad de recompilar la aplicación si el html cambia

que no he usado todavía, pero he oído que el motor de encendido vista es aceptable: http://sparkviewengine.com/ (no estoy seguro si es para C# 2.0 thoug h)

Hace tiempo que experimentó (en PHP) con Gagawa (http://code.google.com/p/gagawa/), donde se pueden hacer cosas como:

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

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

$div->appendChild($link); 

Pero pronto cayó este enfoque a favor de un motor de plantillas.

0

Otro enfoque es convertir los datos a XML y aplicar una hoja de estilos XSL. Para cambiar el formato HTML, solo necesita reemplazar la hoja de estilo.