我使用iTextSharp将
HTML页面转换为PDF.我正在使用给予
here的助手类,我也试图使用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.
这是一个简单的HTTP handler:
<%@ 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>h1</h1> <p>A paragraph</p> <ul> <li>one</li> <li>two</li> <li>three</li> </ul>"; StyleSheet styles = new StyleSheet(); styles.LoadTagStyle(HtmlTags.H1,HtmlTags.FONTSIZE,"16"); styles.LoadTagStyle(HtmlTags.P,"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<IElement> 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的支持已经大大提高.
如果您想查看当前版本支持哪些标签,请参阅SVN for the HtmlTags class.