0

2 年後、MigraDoc と PDFsharp でいくつかのことをするために戻ってきました。生活を楽にするために、スタイルのヘルパー関数を作成しましたが、なぜこれが期待どおりに機能しないのだろうか?

フォントの割り当てはすべて問題なく機能します。フォント ファミリー、サイズ、タイプ、および色が正しく表示されます。また、リンクが作成され、それらも機能します。

ただし、段落スタイルはすべて無視されます。デバッガーで確認できるように、それらは新しいスタイルに割り当てられていますが、レンダリングされていません。

段落や節のルールなのかもしれませんが、私にはわかりません。

誰かが私を啓発できますか?

// all styles by name/definition
public string allStyles = "";

private string style(string styleName)
      {
          if (allStyles.IndexOf(" " + styleName + " ") < 0)  // the stylename is new, so we create it..
          {
                string style = styleName + "   ";
                string fontChar = style[0].ToString();
                string fs = "";
                if (style[1] >= '0' & style[1] <= '9') fs += style.Substring(1, 1);
                if (style[2] >= '0' & style[2] <= '9') fs += style.Substring(2, 1);
                if (style[3] >= '0' & style[3] <= '9') fs += style.Substring(3, 1);
                int fontSize = Convert.ToInt32(fs);
// now digits after position 2 may be ignored
// we use the rest of the stylename for the rest of the style details..
                string styleName2 = styleName.Substring(1);
// add base style to the document style cache       
                Style newStyle = document.AddStyle(styleName, "Normal");
// now we modify the new style..:
                newStyle.Font.Bold = styleName.IndexOf("B") >= 0;
                newStyle.Font.Italic = styleName.IndexOf("I") >= 0;
                if (fontChar == "A") newStyle.Font.Name = "Arial";                
// .. 25 more fonts omitted..
// ..
                if (styleName.IndexOf("a") >= 0) newStyle.Font.Color = MigraDoc.DocumentObjectModel.Colors.AntiqueWhite;
// .. 25 more colors omitted..
// ..
// .. here a a few ParagraphFormat styles, all of which don't work!!
                if (styleName2.IndexOf("L") >= 0) newStyle.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                else if (styleName2.IndexOf("R") >= 0) newStyle.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                else if (styleName2.IndexOf("C") >= 0) newStyle.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                else if (styleName2.IndexOf("J") >= 0) newStyle.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
                if (styleName2.IndexOf("____") >= 0) newStyle.ParagraphFormat.SpaceAfter = 15;
                else if (styleName2.IndexOf("___") >= 0) newStyle.ParagraphFormat.SpaceAfter = 10;
                else if (styleName2.IndexOf("__") >= 0) newStyle.ParagraphFormat.SpaceAfter = 6;
                else if (styleName2.IndexOf("_") >= 0) newStyle.ParagraphFormat.SpaceAfter = 3;

// add stylename to the collection string
                allStyles += "  " + styleName + "  ";
            }
// return the name after creating and modifying the style
            return styleName;                


// a plain FT output function           
        public void writeFT(Section currentSection, string text, string styl, bool newParagraph)
        {
            Paragraph currentParagraph;
            if (newParagraph) currentParagraph = currentSection.AddParagraph();
            else currentParagraph = currentSection.LastParagraph;
            currentParagraph.AddFormattedText(text, style(styl));
        }    



 // an function to output a hyperlink               
         public void writeLink(Section currentSection, string text, string link, string styl, bool newParagraph)
        {
            Paragraph currentParagraph;
            if (newParagraph) currentParagraph = currentSection.AddParagraph();
            else  currentParagraph = currentSection.LastParagraph;
            Hyperlink HL = currentParagraph.AddHyperlink(link, HyperlinkType.Bookmark);
            HL.AddFormattedText(text, style(styl));
        }               

 // and one for anchors

        public void writeAnchor(Section currentSection, string text, string anchor, string styl, bool newParagraph)
        {
            Paragraph currentParagraph;
            if (newParagraph ) currentParagraph = currentSection.AddParagraph();
            else currentParagraph = currentSection.LastParagraph;
            currentParagraph.AddFormattedText(   text, style(styl)); 
            currentParagraph.AddBookmark(anchor);
        }                


// an example call
            writeFT(somesection, "This should be BIG & BLUE ", "A16b",true);
            writeFT(somesection, "This should be BIG & RED  ", "A16r",true);
            writeFT(somesection, "GREEN but not spaced out", "A16g---___",true);
            writeFT(somesection, "This should be BIG & BLACK", "A16k",true);
            writeFT(somesection, "This should be BIG & BLUE ", "A16b",true);
            writeFT(somesection, "This should be BIG & BLUE ", "A16b",true);
4

1 に答える 1

0

段落スタイルを設定するには、 を使用するだけcurrentParagraph.Style = style(styl);です。段落にそのスタイルを使用する場合は、AddText()代わりにを使用してテキストを追加できます (また、別の文字形式でテキストを追加するために呼び出すこともできます)。AddFormattedText()AddFormattedText()

AddFormattedText は文字形式のみをサポートします (段落形式はサポートしません)。段落の一部であるため、論理的です。

API はそれを考慮に入れる必要があります。

于 2014-02-20T14:52:20.200 に答える