示例#1
0
        static void Main(string[] args)
        {
            // ReadPdf();

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


                PdfSharpCore.Pdf.Security.PdfSecuritySettings securitySettings = document.SecuritySettings;

                // Setting one of the passwords automatically sets the security level to
                // PdfDocumentSecurityLevel.Encrypted128Bit.
                securitySettings.UserPassword  = "******";
                securitySettings.OwnerPassword = "******";

                // Don't use 40 bit encryption unless needed for compatibility
                //securitySettings.DocumentSecurityLevel = PdfDocumentSecurityLevel.Encrypted40Bit;

                // Restrict some rights.
                securitySettings.PermitAccessibilityExtractContent = false;
                securitySettings.PermitAnnotations      = false;
                securitySettings.PermitAssembleDocument = false;
                securitySettings.PermitExtractContent   = false;
                securitySettings.PermitFormsFill        = true;
                securitySettings.PermitFullQualityPrint = false;
                securitySettings.PermitModifyDocument   = true;
                securitySettings.PermitPrint            = false;


                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
示例#2
0
        private void ExecuteProtecteFile()
        {
            if (cbProtectFile.Checked)
            {
                LoadDocuments();

                if (PdfDocuments != null && PdfDocuments.Any())
                {
                    string[] registros = System.IO.File.ReadAllLines(txtAdditionalInfoCSVFile.Text);

                    string csvSeparator = CheckCSVSeparator(registros);

                    if (registros != null && registros.Any())
                    {
                        foreach (KeyValuePair <string, PdfDocument> item in PdfDocuments)
                        {
                            string[] tmp = item.Key.Split("\\", StringSplitOptions.RemoveEmptyEntries);

                            if (tmp != null && tmp.Any())
                            {
                                string arquivo = tmp.Last();
                                arquivo = arquivo.Replace(".pdf", "", StringComparison.InvariantCultureIgnoreCase);

                                if (registros.Any(w => w.IndexOf(arquivo, StringComparison.InvariantCultureIgnoreCase) > -1))
                                {
                                    string[] linha = registros.First(w => w.IndexOf(arquivo, StringComparison.InvariantCultureIgnoreCase) > -1).Split(csvSeparator, StringSplitOptions.RemoveEmptyEntries);
                                    if (linha != null && linha.Any())
                                    {
                                        PdfSharpCore.Pdf.Security.PdfSecuritySettings securitySettings = item.Value.SecuritySettings;
                                        securitySettings.UserPassword  = arquivo.Replace(".", "", StringComparison.InvariantCultureIgnoreCase).Replace("-", "", StringComparison.InvariantCultureIgnoreCase);
                                        securitySettings.OwnerPassword = arquivo;

                                        securitySettings.PermitAccessibilityExtractContent = false;
                                        securitySettings.PermitAnnotations      = false;
                                        securitySettings.PermitAssembleDocument = false;
                                        securitySettings.PermitExtractContent   = false;
                                        securitySettings.PermitFormsFill        = true;
                                        securitySettings.PermitFullQualityPrint = true;
                                        securitySettings.PermitModifyDocument   = false;
                                        securitySettings.PermitPrint            = true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }