static void Main(string[] args) { // TfsRemover.RemoveTFS(); TreeInfo ti = GetAncestors(); int maxNumPeople = (int)System.Math.Pow(2.0, (double)ti.MaxGeneration); System.Console.WriteLine(maxNumPeople); System.Collections.Generic.Dictionary <int, System.Collections.Generic.Dictionary <int , DataPoint> > dict = new System.Collections.Generic.Dictionary <int , System.Collections.Generic.Dictionary <int, DataPoint> >(); PdfSharpCore.Fonts.GlobalFontSettings.FontResolver = new FontResolver(); MigraDocCore.DocumentObjectModel.MigraDoc.DocumentObjectModel.Shapes .ImageSource.ImageSourceImpl = new PdfSharpCore.ImageSharp.ImageSharpImageSource <Rgba32>(); using (PdfSharpCore.Pdf.PdfDocument document = new PdfSharpCore.Pdf.PdfDocument()) { document.Info.Title = "Family Tree"; document.Info.Author = "FamilyTree Ltd. - Stefan Steiger"; document.Info.Subject = "Family Tree"; document.Info.Keywords = "Family Tree, Genealogical Tree, Genealogy, Bloodline, Pedigree"; document.ViewerPreferences.Direction = PdfSharpCore.Pdf.PdfReadingDirection.LeftToRight; PdfSharpCore.Pdf.PdfPage page = document.AddPage(); // page.Width = PdfSettings.PaperFormatSettings.Width // page.Height = PdfSettings.PaperFormatSettings.Height const double GOLDEN_RATIO = 1.61803398875; // https://en.wikipedia.org/wiki/Golden_ratio double marginLeft = 125; double marginTop = marginLeft; double textBoxWidth = 200; double textBoxHeight = textBoxWidth / GOLDEN_RATIO; double textBoxVdistance = textBoxHeight / (GOLDEN_RATIO / (GOLDEN_RATIO * GOLDEN_RATIO)); double textBoxLargeHdistance = textBoxWidth / (GOLDEN_RATIO * GOLDEN_RATIO); double textBoxSmallHdistance = textBoxLargeHdistance / (GOLDEN_RATIO * GOLDEN_RATIO); int numGenerationsToList = 5; int maxGenerationIndex = numGenerationsToList - 1; int numItems = (int)System.Math.Pow(2, maxGenerationIndex); page.Orientation = PdfSharpCore.PageOrientation.Landscape; page.Width = marginLeft * 2 + numItems * textBoxWidth + (numItems / 2) * textBoxSmallHdistance + (numItems / 2 - 1) * textBoxLargeHdistance ; page.Height = marginTop * 2 + numGenerationsToList * textBoxHeight + (numGenerationsToList - 1) * textBoxVdistance ; double dblLineWidth = 1.0; string strHtmlColor = "#FF00FF"; PdfSharpCore.Drawing.XColor lineColor = XColorHelper.FromHtml(strHtmlColor); PdfSharpCore.Drawing.XPen pen = new PdfSharpCore.Drawing.XPen(lineColor, dblLineWidth); PdfSharpCore.Drawing.XFont font = new PdfSharpCore.Drawing.XFont("Arial" , 12.0, PdfSharpCore.Drawing.XFontStyle.Bold ); using (PdfSharpCore.Drawing.XGraphics gfx = PdfSharpCore.Drawing.XGraphics.FromPdfPage(page)) { gfx.MUH = PdfSharpCore.Pdf.PdfFontEncoding.Unicode; PdfSharpCore.Drawing.Layout.XTextFormatter tf = new PdfSharpCore.Drawing.Layout.XTextFormatter(gfx); tf.Alignment = PdfSharpCore.Drawing.Layout.XParagraphAlignment.Left; PdfSharpCore.Drawing.Layout.XTextFormatterEx2 etf = new PdfSharpCore.Drawing.Layout.XTextFormatterEx2(gfx); for (int generationNumber = maxGenerationIndex; generationNumber > -1; --generationNumber) { dict[generationNumber] = new System.Collections.Generic.Dictionary <int, DataPoint>(); int num = (int)System.Math.Pow(2.0, generationNumber); for (int i = 0; i < num; ++i) { if (generationNumber != maxGenerationIndex) { var dp1 = dict[generationNumber + 1][i * 2]; var dp2 = dict[generationNumber + 1][i * 2 + 1]; var rect1 = dp1.rect; var rect2 = dp2.rect; double xNew = (rect1.TopLeft.X + rect2.TopRight.X) / 2.0; double yNew = marginTop + generationNumber * textBoxHeight + generationNumber * textBoxVdistance; gfx.DrawLine(pen, xNew, yNew + rect1.Height, rect1.X + rect1.Width / 2.0, rect1.Y); gfx.DrawLine(pen, xNew, yNew + rect1.Height, rect2.X + rect2.Width / 2.0, rect2.Y); xNew = xNew - rect1.Width / 2.0; dict[generationNumber][i] = new DataPoint() { Person = ( from itemList in ti.ls[generationNumber] where itemList.Id == dp1.Person.Child select itemList ).FirstOrDefault(), rect = new DataStructures.Rectangle(xNew, yNew, rect1.Width, rect1.Height) }; } else { System.Console.WriteLine($"i: {i}"); int numSmallSpaces = (i + 1) / 2; System.Console.WriteLine($"numSmallSpaces: {numSmallSpaces}"); int numPairs = i / 2; System.Console.WriteLine($"numPairs: {numPairs}"); double rectX = marginLeft + i * textBoxWidth + numSmallSpaces * textBoxSmallHdistance + numPairs * textBoxLargeHdistance ; double rectY = marginTop + generationNumber * textBoxHeight + generationNumber * textBoxVdistance ; dict[generationNumber][i] = new DataPoint() { Person = ti.ls[generationNumber][i], rect = new DataStructures.Rectangle(rectX, rectY, textBoxWidth, textBoxHeight) }; } gfx.DrawRectangle(pen, dict[generationNumber][i].rect.ToXRect()); string text = $@"Generation {generationNumber} Person {i}"; text = dict[generationNumber][i].Person.composite_name; tf.DrawString(text , font , PdfSharpCore.Drawing.XBrushes.Black , dict[generationNumber][i].rect.ToXRect() , PdfSharpCore.Drawing.XStringFormats.TopLeft ); } // Next i } // Next generationNumber } // End Using gfx byte[] baPdfDocument; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { document.Save(ms, false); ms.Flush(); // baPdfDocument = new byte[ms.Length]; // ms.Seek(0, System.IO.SeekOrigin.Begin); // ms.Read(baPdfDocument, 0, (int)ms.Length); baPdfDocument = ms.ToArray(); } // End Using ms System.IO.File.WriteAllBytes("FamilyTree.pdf", baPdfDocument); //document.Save(filename); } // End Using document System.Console.WriteLine(System.Environment.NewLine); System.Console.WriteLine(" --- Press any key to continue --- "); System.Console.ReadKey(); } // End Sub Main
static void OldSimpleMain(string[] args) { PdfSharpCore.Fonts.GlobalFontSettings.FontResolver = new FontResolver(); MigraDocCore.DocumentObjectModel.MigraDoc.DocumentObjectModel.Shapes .ImageSource.ImageSourceImpl = new PdfSharpCore.ImageSharp.ImageSharpImageSource <Rgba32>(); using (PdfSharpCore.Pdf.PdfDocument document = new PdfSharpCore.Pdf.PdfDocument()) { document.Info.Title = "Family Tree"; document.Info.Author = "FamilyTree Ltd. - Stefan Steiger"; document.Info.Subject = "Family Tree"; document.Info.Keywords = "Family Tree, Genealogical Tree, Genealogy, Bloodline, Pedigree"; document.ViewerPreferences.Direction = PdfSharpCore.Pdf.PdfReadingDirection.LeftToRight; PdfSharpCore.Pdf.PdfPage page = document.AddPage(); // page.Width = PdfSettings.PaperFormatSettings.Width // page.Height = PdfSettings.PaperFormatSettings.Height page.Width = 500; page.Height = 1000; page.Orientation = PdfSharpCore.PageOrientation.Landscape; double mid = page.Width / 2; double textBoxWidth = 200; double halfTextBoxWidth = textBoxWidth / 2; using (PdfSharpCore.Drawing.XGraphics gfx = PdfSharpCore.Drawing.XGraphics.FromPdfPage(page)) { gfx.MUH = PdfSharpCore.Pdf.PdfFontEncoding.Unicode; PdfSharpCore.Drawing.Layout.XTextFormatter tf = new PdfSharpCore.Drawing.Layout.XTextFormatter(gfx); tf.Alignment = PdfSharpCore.Drawing.Layout.XParagraphAlignment.Left; PdfSharpCore.Drawing.Layout.XTextFormatterEx2 etf = new PdfSharpCore.Drawing.Layout.XTextFormatterEx2(gfx); string fn = @"C:\Users\username\Pictures\4_Warning_Signs_Of_Instability_In_Russia1.png"; // fn = @"C:\Users\username\Pictures\62e867ba-9bb7-40d0-b01f-57f7cc951929.jpg"; // DrawImg(fn, gfx, 10, 10); double dblWidth = 1.0; string strHtmlColor = "#FF00FF"; PdfSharpCore.Drawing.XColor LineColor = XColorHelper.FromHtml(strHtmlColor); PdfSharpCore.Drawing.XPen pen = new PdfSharpCore.Drawing.XPen(LineColor, dblWidth); double dblX1 = 100; double dblY1 = 100; double dblX2 = 200; double dblY2 = 200; gfx.DrawLine(pen, dblX1, dblY1, dblX2, dblY2); double rectX = 100; double rectY = 100; double rectWidth = 200; double rectHeight = 100; PdfSharpCore.Drawing.XRect rect = new PdfSharpCore.Drawing.XRect(rectX, rectY , rectWidth, rectHeight ); PdfSharpCore.Drawing.XFont font = new PdfSharpCore.Drawing.XFont("Arial" , 12.0, PdfSharpCore.Drawing.XFontStyle.Bold ); int lastFittingChar = 0; double neededHeight = 0.0; string text = @"I bi dr Gummiboum U schtah eifach so chli da So wie jedä Gummiboum 'sch im Fau aues, woni cha U i nime d Tage so wie si sii U si chömed u gö wider verbii U aues wird anders oder blibt wies isch gsii Ja i nime d Tage so we si sii U si chömed u gö wider verbii Aues wird anders oder blibt wies isch gsii Ja aues wird anders oder blibt wies isch gsii I bi dr Gummiboum U verstoube fängs ä chli Oh Gummiboum I bin ä geile huere Gummiboum öppert mues ne schliesslich sii"; etf.PrepareDrawString(text, font, rect, out lastFittingChar, out neededHeight); System.Console.WriteLine(lastFittingChar); System.Console.WriteLine(neededHeight); string foo = text.Substring(0, lastFittingChar); System.Console.WriteLine(foo); tf.DrawString(text , font , PdfSharpCore.Drawing.XBrushes.Black , rect , PdfSharpCore.Drawing.XStringFormats.TopLeft ); //gfx.DrawRectangle(PdfSharpCore.Drawing.XBrushes.HotPink, rect); gfx.DrawRectangle(pen, rect); } // End Using gfx byte[] baPdfDocument; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { document.Save(ms, false); ms.Flush(); // baPdfDocument = new byte[ms.Length]; // ms.Seek(0, System.IO.SeekOrigin.Begin); // ms.Read(baPdfDocument, 0, (int)ms.Length); baPdfDocument = ms.ToArray(); } // End Using ms System.IO.File.WriteAllBytes("FamilyTree.pdf", baPdfDocument); //document.Save(filename); } // End Using document System.Console.WriteLine(System.Environment.NewLine); System.Console.WriteLine(" --- Press any key to continue --- "); System.Console.ReadKey(); } // End Sub Main