itextsharp – CSS未应用 – C#.NET

我正在使用iTextSharpHTML页面转换为PDF 。 我正在使用这里给出的辅助类,我也尝试使用StyleSheet.LoadTagStyle()来应用CSS。 但似乎没有任何效果。 任何见解?

编辑

我可以添加这样的样式 –

 .mystyle { color: red; width: 400px; } 

使用以下代码 –

 StyleSheet css = new StyleSheet(); css.LoadStyle("mystyle", "color", "red"); css.LoadStyle("mystyle", "width", "400px"); 

但是当我有这样复杂的风格时会发生什么?

 div .myclass { /*some styles*/ } td a.hover { /*some styles*/ } td .myclass2 { /*some styles*/ } .myclass .myinnerclass { /*some styles*/ } 

如何使用iTextSharp添加它?

使用StyleSheet.LoadTagStyle(),你在正确的轨道上。

基本上这是一个四步过程:

  1. 获取字符串中的HTML
  2. 实例化一个StyleSheet对象,并为您想要的每个样式调用StyleSheet.LoadTagStyle()
  3. 调用HTMLWorker.ParseToList()
  4. 将从上面调用返回的IElement添加到Document对象。

这是一个简单的HTTP处理程序 :

 <%@ WebHandler Language='C#' Class='styles' %> using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Web; using iTextSharp.text.html; using iTextSharp.text.html.simpleparser; using iTextSharp.text; using iTextSharp.text.pdf; public class styles : IHttpHandler { public void ProcessRequest (HttpContext context) { HttpResponse Response = context.Response; Response.ContentType = "application/pdf"; string Html = @" 

h1

A paragraph

  • one
  • two
  • three
"; StyleSheet styles = new StyleSheet(); styles.LoadTagStyle(HtmlTags.H1, HtmlTags.FONTSIZE, "16"); styles.LoadTagStyle(HtmlTags.P, HtmlTags.FONTSIZE, "10"); styles.LoadTagStyle(HtmlTags.P, HtmlTags.COLOR, "#ff0000"); styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "10"); styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "16"); using (Document document = new Document()) { PdfWriter.GetInstance(document, Response.OutputStream); document.Open(); List objects = HTMLWorker.ParseToList( new StringReader(Html), styles ); foreach (IElement element in objects) { document.Add(element); } } } public bool IsReusable { get { return false; } } }

你需要5.0.6版来运行上面的代码。 解析HTML的支持已经大大改进。

如果您想查看当前版本支持的标记,请参阅HN标记类的SVN 。

 var reader = new StringReader(text); var styles = new StyleSheet(); styles.LoadTagStyle("body", "face", "Arial"); styles.LoadTagStyle("body", "size", fontSize + "px"); styles.LoadTagStyle("body", "font-weight", "bold"); ArrayList list = HTMLWorker.ParseToList(reader, styles); for (int k = 0; k < list.Count; k++) { var element = (IElement)list[k]; if (element is Paragraph) { var paragraph = (Paragraph)element; paragraph.SpacingAfter = 10f; cell.AddElement(paragraph); } else cell.AddElement((IElement)list[k]); }