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は、関数の追加のみが許可されているようです。2番目のインスタンスを切り離すだけの方法はありreplaceません。substring

私はここで明白な何かを見落としていますか?太字/斜体の例からわかるように、これはかなり単純なプロセスであるため、text.superscriptを適切に渡していないと思います。

ありとあらゆる助けをいただければ幸いです。

乾杯

4

1 に答える 1

0

上付き文字テキストを追加してから、子に対して _renderHtmlElement を呼び出します。おそらく、子は同じテキストを返しますが、上付き文字属性はありません。HTML の <sup> と </sup> の間に他のタグはありますか?

MigraDoc には Remove メソッドがあるため、アイテムを削除できますが、最初から追加しない方がよいでしょう。

「ft.Superscript = true;」にブレークポイントを設定します。「sup」要素の子に対して _renderHtmlElement が何をするかを確認します。

于 2011-09-15T08:09:35.690 に答える