Текст с надстрочным индексом в MigraDoc

У меня есть класс для написания PDF-документа через MigraDoc.

Функция делает такой вызов:

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.

Любая помощь будет принята с благодарностью.

Ваше здоровье


person Cory Dee    schedule 14.09.2011    source источник
comment
Как выглядит ваш HTML-класс?   -  person Timsen    schedule 13.02.2012


Ответы (1)


Вы добавляете текст надстрочного индекса, затем вызываете _renderHtmlElement для дочерних элементов — возможно, дочерний элемент дает вам тот же текст, но без атрибута надстрочного индекса. Есть ли другие теги между ‹sup› и ‹/sup› в вашем HTML?

В MigraDoc есть методы Remove, поэтому вы можете удалять элементы, но лучше не добавлять их в первую очередь.

Я бы поставил точку останова на "ft.Superscript = true;" и проверьте, что _renderHtmlElement делает для дочерних элементов элемента «sup».

person I liked the old Stack Overflow    schedule 15.09.2011
comment
Вы были правы, думая, что ребенок должен давать один и тот же текст. Я добавил в рекурсивный цикл простой if(element.Type!=sup), и это решило проблему. Спасибо! - person Cory Dee; 15.09.2011