itextsharp - CSS未应用 - C#.NET

NLV*_*NLV 10 .net css c# itext

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

编辑

我可以添加这样的样式 -

.mystyle
{
   color: red;
   width: 400px;
}
Run Code Online (Sandbox Code Playgroud)

使用以下代码 -

StyleSheet css = new StyleSheet();
css.LoadStyle("mystyle", "color", "red");
css.LoadStyle("mystyle", "width", "400px");
Run Code Online (Sandbox Code Playgroud)

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

div .myclass
{
    /*some styles*/
}

td a.hover
{
    /*some styles*/
}

td .myclass2
{
    /*some styles*/
}    
.myclass .myinnerclass
{
    /*some styles*/
}
Run Code Online (Sandbox Code Playgroud)

如何使用iTextSharp添加它?

kuu*_*nbo 14

使用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>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, 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<IElement> objects = HTMLWorker.ParseToList(
        new StringReader(Html), styles
      );
      foreach (IElement element in objects) {
        document.Add(element);
      }
    }
 }
  public bool IsReusable {
      get { return false; }
  }
} 
Run Code Online (Sandbox Code Playgroud)

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

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