文字与上标在MigraDoc

时间:2011-09-14 18:46:20

标签: c# pdf migradoc

我有一个通过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的方法似乎只允许添加函数,没有replacesubstring或类似的东西,只能撕掉第二个实例。

我是否忽视了一些明显的东西?从粗体/斜体示例中可以看出,这是一个相当直接的过程,所以我认为我只是没有正确地传递text.superscript。

非常感谢任何和所有帮助。

干杯

1 个答案:

答案 0 :(得分:0)

您添加了Superscript文本,然后为子项调用_renderHtmlElement - 也许一个孩子为您提供相同的文本,但没有上标属性。 < sup>之间是否还有其他标签?和< / sup>在你的HTML?

MigraDoc有删除方法,因此您可以删除项目 - 但最好不要首先添加它们。

我在“ft.Superscript = true”上加了一个断点。并检查_renderHtmlElement为“sup”元素的子元素做了什么。