iTextSharp SetListSymbol不起作用

时间:2012-05-17 02:32:53

标签: pdf-generation itextsharp

我正在尝试在iTextSharp生成的PDF中设置样式。

每当我尝试将符号设置为列出项目时,似乎SetListSymbol对我不起作用。

以下是我使用的代码:

var elements = HTMLWorker.ParseToList(overviewReader,null);

foreach (var element in elements)
{
    //element
    var list = element as List;
    if (list != null)
    {
        //list.Symbol.GetImage();
        list.SetListSymbol("\u25A0");
        list.IndentationLeft = 20f;
        doc.Add(list);
    }
    else
    {
        doc.Add(element);
    }
}

2 个答案:

答案 0 :(得分:1)

iText和iTextSharp中的HTMLWorker通过iTextSharp.text.html.simpleparser.StyleSheet支持一些非常有限的“样式表”。这些样式表基于HTML / CSS属性,但只是最基本的(想想HTML 3.2)。

您要做的三件事主要是(1)加载字体,(2)创建指向该字体的StyleSheet和(3)将StyleSheet绑定到{{1 }}。我将从我的answer here中部分解除一些代码。

iTextSharp不会自动抓取整个系统寻找字体,因此您需要手动注册它们。 (实际上,有一种方法可以调用并告诉iTextSharp猜测加载字体但速度要快得多。)

步骤#1,加载字体,在本例中为Curlz

HTMLWorker

步骤2,创建一个//Path to our font string OurFont = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "CURLZ___.TTF"); //Register the font with iTextSharp iTextSharp.text.FontFactory.Register(OurFont); 并将其指向我们的字体。我还会设置一些其他属性来展示它们。

StyleSheet

步骤3,将//Create a new stylesheet iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet(); //Set the default body font to our registered font's internal name ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.FACE, "Curlz MT"); ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.COLOR, "FF0000"); ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.SIZE, "50"); 绑定到我们的StyleSheet

HTMLWorker

以下是针对iTextSharp 5.2.0的全功能C#WinForms应用,它展示了以上所有内容。

//Use our StyleSheet from above when parsing
var elements = HTMLWorker.ParseToList(overviewReader, ST);

答案 1 :(得分:0)

List objects = HTMLWorker.ParseToList(new StringReader(format),null);

                foreach (IElement element in objects)
                {

                    List list = new List();
                    list.SetListSymbol("\u2022");
                    list.IndentationLeft = 20f;                        
                    list.Add(element);
                    if (list.Chunks.Count == 0)
                    {
                        doc1.Add(element);
                    }
                    else
                    {
                        doc1.Add(list);
                    }
                }