我有一个通过MigraDoc编写PDF文档的课程。
一个函数进行如下调用:
var p = row.Cells[1].AddParagraph();
p.AddLineBreak();
p.AddLineBreak();
_renderHtml(office["Address"], p.AddFormattedText());
_renderHtml代码如下所示:
private void _renderHtml(string html, FormattedText text)
{
_renderHtmlElement(
new Html.Parsable("dom", html),
text
);
}
然后,_renderHtmlElement代码会对要实际处理的HTML进行一系列检查。我想我应该将它扔进一个开关盒,但这并不会影响我的问题。所以它看起来像这样:
private void _renderHtmlElement(Html.Element element, FormattedText text)
{
if ("p" == element.Type)
{
//do stuff
}
else if ("li" == element.Type)
{
//do stuff
}
else if ("b" == element.Type || "strong" == element.Type)
{
text = text.AddFormattedText(TextFormat.Bold);
}
else if ("i" == element.Type || "em" == element.Type)
{
text = text.AddFormattedText(TextFormat.Italic);
}
else if ("br" == element.Type || "em" == element.Type)
{
text.AddLineBreak();
}
else if ("text" == element.Type)
{
//do stuff
}
else if("sup" == element.Type)
{
FormattedText ft = text.AddFormattedText(element.ContentDecoded);
ft.Superscript = true;
}
foreach (var child in element.ChildElements)
{
_renderHtmlElement(child, text);
}
}
我的工作是让上标代码正常工作。我现在在那里的代码将添加正确的内容,格式化为上标,但它仍然具有紧随其后的原始内容(不是上标)。 text
的方法似乎只允许添加函数,没有replace
或substring
或类似的东西,只能撕掉第二个实例。
我是否忽视了一些明显的东西?从粗体/斜体示例中可以看出,这是一个相当直接的过程,所以我认为我只是没有正确地传递text.superscript。
非常感谢任何和所有帮助。
干杯
答案 0 :(得分:0)
您添加了Superscript文本,然后为子项调用_renderHtmlElement - 也许一个孩子为您提供相同的文本,但没有上标属性。 < sup>之间是否还有其他标签?和< / sup>在你的HTML?
MigraDoc有删除方法,因此您可以删除项目 - 但最好不要首先添加它们。
我在“ft.Superscript = true”上加了一个断点。并检查_renderHtmlElement为“sup”元素的子元素做了什么。