0

我有一门通过 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 。

任何和所有的帮助将不胜感激。

干杯

4

1 回答 1

0

您添加上标文本,然后为孩子调用 _renderHtmlElement - 也许孩子给您相同的文本,但没有上标属性。您的 HTML 中的 <sup> 和 </sup> 之间是否还有其他标签?

MigraDoc 具有 Remove 方法,因此您可以删除项目 - 但最好不要一开始就添加它们。

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

于 2011-09-15T08:09:35.690 回答