2014-02-18 87 views
0

兩年後我剛回來做一些事情,用MigraDoc & PDFsharp。 爲了讓生活更輕鬆,我爲樣式創建了一個輔助函數,我想知道爲什麼這不能按預期工作?MigraDoc - 爲什麼我的ParagraphFormats不顯示?

所有的字體分配工作得很好:字體家族,大小和類型以及顏色都是正確的。鏈接也被創建並且它們也可以工作。

但是,所有段落樣式都被忽略。正如我在調試器中看到的那樣,它們被分配給新的樣式,但它們不被渲染。

這可能是關於段落和部分的規則,我不知道。

有人可以啓發我嗎?

// 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); 

回答

0

要設置段落樣式,請使用currentParagraph.Style = style(styl);。如果要爲段落使用該樣式(並且您仍然可以調用AddFormattedText()添加具有不同字符格式的文本),則可以使用AddText()而不是AddFormattedText()添加文本。

AddFormattedText只支持字符格式(不是段落格式)。邏輯,因爲它是一個段落的一部分。

您的API應該考慮到這一點。