iTextSharp将字体系列设置为块

时间:2012-07-04 10:51:35

标签: c# itextsharp font-family

因为我使用动态文本,斜体或粗体文本可能是任何地方,将所有内容切割成块不是一个选项,所以我必须使用html解析器。

输入字符串是

ąčęėįšųū90-žthis <i>is <b>bold ąčęėįšųū90-ž</i></b> text

使用iTextSharp html解析器格式化字符串:

private Paragraph CreateSimpleHtmlParagraph(String text)
{
    //Our return object
    List<Chunk> c = new List<Chunk>();
    Paragraph p = new Paragraph();
    var styles = new StyleSheet();           
    using (StringReader sr = new StringReader(text))
    {
        //Parse and get a collection of elements
        List<IElement> elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
        foreach (IElement e in elements)
        {
            var chunks = e.Chunks;
            foreach (var chunk in chunks) //list of chunks
            {                        
                chunk.Font.SetFamily(""); //how to set font family here
            }
            p.Add(e);                    
        }
    }
    return p; //getting all the special chars (ąčęėįšųū90-ž...)
}

主要形式的代码:

Paragraph pr1 = CreateSimpleHtmlParagraph("ąčęėįšųū90-žthis <i>is <b>bold ąčęėįšųū90-ž</i></b> text");
doc.Add(pr1);

但在PDF中我只看到

  

š90-žthis 粗体š90-ž 文字

并且没有其他字符(ąčęėį)。我知道它与字体有关,但无法找到问题所在。整个文档的字体应该是相同的,新罗马字符,arial,等等,可以显示我的特殊字符(cp1257,波罗的海编码)。

通常,当我必须格式化文本时,我使用Chunks和我自己的字体:

Font arial10n = PdfFontManager.GetFont("c:\\windows\\fonts\\arial.ttf", 10);

colClientTxt.AddText(new Chunk(row["name"].ToString() + "\n", arial10n));

并在PdfFontManager类中:

public static Font GetFont(string name, int size)
    {
        BaseFont baseFont = BaseFont.CreateFont(name, BaseFont.CP1257, BaseFont.EMBEDDED);
        Font font = new Font(baseFont, size);
        return font;
    }

那么,如何设置字体系列,或者可能还有另一种方法来对我的文本进行dinamicaly格式化?

0 个答案:

没有答案