因为我使用动态文本,斜体或粗体文本可以在任何地方,将所有内容切成块不是一种选择,所以我必须使用 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- ž这是粗体š90-ž文本
并且没有其他字符 ( ąčęėį
)。我知道它与字体有关,但找不到问题在哪里。整个文档的字体应该是相同的,time new roman, arial, ect., 任何可以显示我的特殊字符(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;
}
那么,如何设置字体系列,或者也许有另一种方式来格式化我的文本?