Текст с надстрочным индексом в MigraDoc - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть класс для написания 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.

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

Приветствия

1 Ответ

0 голосов
/ 15 сентября 2011

Вы добавляете текст Superscript, затем вызываете _renderHtmlElement для детей - возможно, ребенок дает вам тот же текст, но без атрибута верхнего индекса. Есть ли другие теги между и в вашем HTML?

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

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

...