2011-09-14 18 views
0

私はMigraDoc経由でPDF文書を書くためのクラスを持っています。MigraDocの上付き文字

private void _renderHtml(string html, FormattedText text) 
{ 
     _renderHtmlElement(
     new Html.Parsable("dom", html), 
     text 
    ); 
} 

_renderHtmlElementコードはその後、HTMLを実際に処理する何のために一連のチェックを行います。

var p = row.Cells[1].AddParagraph(); 
p.AddLineBreak(); 
p.AddLineBreak(); 
_renderHtml(office["Address"], p.AddFormattedText()); 

_renderHtmlコードは次のようになります。

機能は、このような呼び出しを行います。私はそれをスイッチのケースに投げ入れるべきだと思っていますが、それは本当に私の質問に影響しません。だから、これは次のようになります:

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など、2番目のインスタンスを破棄するのに似たものはありません。

私はここで何かを見落としていますか?太字/斜体の例から分かるように、それはかなり単純な処理です。だから、私はtext.superscriptを適切に渡していないと思うでしょう。

すべてのご協力をいただければ幸いです。あなたは上付きのテキストを追加

乾杯

+0

あなたのHTMLクラスはどのように見えますか? – Timsen

答えて

0

は、その後、あなたは子供たちのために_renderHtmlElementを呼び出す - 多分子供はあなたに同じテキストを与えるが、上付き文字属性なし。 HTMLに<sup>と</sup >の間に他のタグがありますか?

MigraDocにはRemoveメソッドがあり、アイテムを削除することができますが、最初に追加しない方が良いでしょう。

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

+0

あなたは子供が同じテキストを与えなければならないと思うのは当然でした。再帰的なループに単純なif(element.Type!= "sup")を追加し、問題を解決しました。ありがとう! –

関連する問題