itextsharp – CSS未应用 – C#.NET
我正在使用iTextSharp
将HTML
页面转换为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(),你在正确的轨道上。
基本上这是一个四步过程:
- 获取字符串中的HTML
- 实例化一个StyleSheet对象,并为您想要的每个样式调用StyleSheet.LoadTagStyle() 。
- 调用HTMLWorker.ParseToList()
- 将从上面调用返回的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]); }