No aplicar el CSS al generar PDF usando iTextsharp.dll

Estoy generando PDF utilizando iTextSharp.dll, pero el problema es que no puedo aplicar ese CSS. Tengo un div

Personal Data

ahora mi código .aspx.cs es así:

  iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet(); styles.LoadTagStyle("#headerdiv", "height", "30px"); styles.LoadTagStyle("#headerdiv", "font-weight", "bold"); styles.LoadTagStyle("#headerdiv", "font-family", "Cambria"); styles.LoadTagStyle("#headerdiv", "font-size", "20px"); styles.LoadTagStyle("#headerdiv", "background-color", "Blue"); styles.LoadTagStyle("#headerdiv", "color", "White"); styles.LoadTagStyle("#headerdiv", "padding-left", "5px"); HTMLWorker worker = new HTMLWorker(document); worker.SetStyleSheet(styles); // step 4: we open document and start the worker on the document document.Open(); worker.StartDocument(); // step 5: parse the html into the document worker.Parse(reader); // step 6: close the document and the worker worker.EndDocument(); worker.Close(); document.Close(); 

Hay un par de cosas sucediendo aquí. En primer lugar, el analizador HTML / CSS en iText y iTextSharp están lejos de estar completo. Definitivamente son muy poderosos, pero todavía tienen mucho camino por recorrer. Cada versión mejora, así que siempre asegúrese de estar usando la última versión.

En segundo lugar, he visto más actividad HTML / CSS en un complemento para iText / iTextSharp llamado XMLWorker que es posible que desee ver. Usted ya no “carga estilos”, simplemente pasa HTML / CSS en bruto y se da cuenta de muchas cosas. Puede ver algunos ejemplos aquí , ver una lista de atributos CSS compatibles aquí , descargarlo aquí (y obtener los dos archivos que faltan aquí y aquí ).

En tercer lugar, LoadTagStyle es para cargar atributos de estilo para tags HTML, no ID de CSS o clases. Desea utilizar LoadStyle para cargar por clase:

 styles.LoadStyle("", "", ""); 

Desafortunadamente, este método todavía no hace lo que quieres que haga siempre. Por ejemplo, para cambiar el tamaño de la fuente, uno pensaría que diría:

 styles.LoadStyle("headerdiv", "font-size", "60ptx); 

Pero para que funcione, solo puede usar tamaños de fuente HTML relativos (1,2, -1, etc.) o tamaños de PT y debe usar la propiedad de size :

 styles.LoadStyle("headerdiv", "size", "60pt"); //or styles.LoadStyle("headerdiv", "size", "2"); 

Honestamente, el LoadStyle siente como una LoadStyle tardía que solo se completó parcialmente y recomiendo no usarlo en realidad. En su lugar, recomiendo escribir los atributos de estilo directamente en línea si puedes:

 string html = "
Personal Data
";

Obviamente, esto derrota los puntos de CSS y, una vez más, es por eso que están trabajando en el nuevo XMLWorker anterior.

Por último, para usar las fonts por su nombre, primero tiene que registrarlas en iTextSharp, no las buscará:

 iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria"); 

En caso de que alguien todavía esté teniendo problemas con esto. La última versión de itextsharp (actualmente 5.3.2) mejora significativamente el procesador HTMLWorker.

Puede obtenerlo aquí: http://sourceforge.net/projects/itextsharp/

La forma correcta de hacer referencia al color de fondo es a través de la clase HtmlTags

 styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");