After 2 years I just returned to do a few things with MigraDoc & PDFsharp.
To make life easier I have created a helper function for styles and I wonder why this doesn't work as expected?
All font assignments work just fine: Font family, size and type as well as colors come out right. Also the links get created and they work, too.
But all paragraph styles are ignored. They are assigned to the new styles, as I can see in the debugger, but they are not rendered.
It is probably a rule about paragraphs and sections, which I don't know.
Can somebody enlighten me?
// 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);