C# 文档中带上标的文本

C# 文档中带上标的文本,c#,pdf,migradoc,C#,Pdf,Migradoc,我有一门通过MigraDoc编写PDF文档的课程 函数进行如下调用: var p = row.Cells[1].AddParagraph(); p.AddLineBreak(); p.AddLineBreak(); _renderHtml(office["Address"], p.AddFormattedText()); private void _renderHtml(string html, FormattedText text) { _renderHtmlElement(

我有一门通过MigraDoc编写PDF文档的课程

函数进行如下调用:

var p = row.Cells[1].AddParagraph();
p.AddLineBreak();
p.AddLineBreak();
_renderHtml(office["Address"], p.AddFormattedText());
private void _renderHtml(string html, FormattedText text)
{
      _renderHtmlElement(
         new Html.Parsable("dom", html),
         text
      );
}
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);
    }
}
_renderHtml代码如下所示:

var p = row.Cells[1].AddParagraph();
p.AddLineBreak();
p.AddLineBreak();
_renderHtml(office["Address"], p.AddFormattedText());
private void _renderHtml(string html, FormattedText text)
{
      _renderHtmlElement(
         new Html.Parsable("dom", html),
         text
      );
}
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);
    }
}
然后_renderHtmlElement代码对实际要处理的HTML进行一系列检查。我想我应该把它放到一个开关柜里,但这并不影响我的问题。看起来是这样的:

var p = row.Cells[1].AddParagraph();
p.AddLineBreak();
p.AddLineBreak();
_renderHtml(office["Address"], p.AddFormattedText());
private void _renderHtml(string html, FormattedText text)
{
      _renderHtmlElement(
         new Html.Parsable("dom", html),
         text
      );
}
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

我们将非常感谢您的任何帮助


干杯

添加上标文本,然后为孩子们调用_renderhtmlement-也许孩子们给了你相同的文本,但没有上标属性。 在HTML和之间是否有其他标记

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


我将在“ft.Superscript=true”上设置一个断点,并检查_renderHtmlElement对“sup”元素的子元素所做的操作。

您认为子元素必须给出相同的文本是正确的。我在递归循环中添加了一个简单的if(element.Type!=“sup”),它解决了这个问题。谢谢你的HTML类看起来怎么样?