Ejemplo n.º 1
0
        protected void ManipulatePdf(String dest)
        {
            // Creates directory and new pdf file by content of the read pdf
            FileInfo file = new FileInfo(PDF);

            file.Directory.Create();

            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(PDF));

            for (int i = 1; i < pdfDoc.GetNumberOfPages();)
            {
                if (GetFactors(++i).Count > 1)
                {
                    continue;
                }

                // Adding named destinations for further usage depending on the needs
                PdfPage   pdfPage              = pdfDoc.GetPage(i);
                Rectangle pageRect             = pdfPage.GetPageSize();
                float     getLeft              = pageRect.GetLeft();
                float     getTop               = pageRect.GetTop();
                PdfExplicitDestination destObj = PdfExplicitDestination.CreateXYZ(pdfPage, getLeft, getTop, 1);
                pdfDoc.AddNamedDestination("prime" + i, destObj.GetPdfObject());
            }

            pdfDoc.Close();

            CreateXml(PDF, dest);
        }
Ejemplo n.º 2
0
        public virtual void AddOutlinesWithNamedDestinations01()
        {
            PdfReader reader = new PdfReader(new FileStream(sourceFolder + "iphone_user_guide.pdf", FileMode.Open, FileAccess.Read
                                                            ));
            String      filename = destinationFolder + "outlinesWithNamedDestinations01.pdf";
            FileStream  fos      = new FileStream(filename, FileMode.Create);
            PdfWriter   writer   = new PdfWriter(fos);
            PdfDocument pdfDoc   = new PdfDocument(reader, writer);
            PdfArray    array1   = new PdfArray();

            array1.Add(pdfDoc.GetPage(2).GetPdfObject());
            array1.Add(PdfName.XYZ);
            array1.Add(new PdfNumber(36));
            array1.Add(new PdfNumber(806));
            array1.Add(new PdfNumber(0));
            PdfArray array2 = new PdfArray();

            array2.Add(pdfDoc.GetPage(3).GetPdfObject());
            array2.Add(PdfName.XYZ);
            array2.Add(new PdfNumber(36));
            array2.Add(new PdfNumber(806));
            array2.Add(new PdfNumber(1.25));
            PdfArray array3 = new PdfArray();

            array3.Add(pdfDoc.GetPage(4).GetPdfObject());
            array3.Add(PdfName.XYZ);
            array3.Add(new PdfNumber(36));
            array3.Add(new PdfNumber(806));
            array3.Add(new PdfNumber(1));
            pdfDoc.AddNamedDestination("test1", array2);
            pdfDoc.AddNamedDestination("test2", array3);
            pdfDoc.AddNamedDestination("test3", array1);
            PdfOutline root         = pdfDoc.GetOutlines(false);
            PdfOutline firstOutline = root.AddOutline("Test1");

            firstOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test1")));
            PdfOutline secondOutline = root.AddOutline("Test2");

            secondOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test2")));
            PdfOutline thirdOutline = root.AddOutline("Test3");

            thirdOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test3")));
            pdfDoc.Close();
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, sourceFolder + "cmp_outlinesWithNamedDestinations01.pdf"
                                                                             , destinationFolder, "diff_"));
        }
Ejemplo n.º 3
0
        internal virtual PdfDestination CopyDestination(PdfObject dest, IDictionary <PdfPage, PdfPage> page2page, PdfDocument
                                                        toDocument)
        {
            PdfDestination d = null;

            if (dest.IsArray())
            {
                PdfObject pageObject = ((PdfArray)dest).Get(0);
                foreach (PdfPage oldPage in page2page.Keys)
                {
                    if (oldPage.GetPdfObject() == pageObject)
                    {
                        // in the copiedArray old page ref will be correctly replaced by the new page ref as this page is already copied
                        PdfArray copiedArray = (PdfArray)dest.CopyTo(toDocument, false);
                        d = new PdfExplicitDestination(copiedArray);
                        break;
                    }
                }
            }
            else
            {
                if (dest.IsString() || dest.IsName())
                {
                    PdfNameTree destsTree = GetNameTree(PdfName.Dests);
                    IDictionary <String, PdfObject> dests = destsTree.GetNames();
                    String   srcDestName  = dest.IsString() ? ((PdfString)dest).ToUnicodeString() : ((PdfName)dest).GetValue();
                    PdfArray srcDestArray = (PdfArray)dests.Get(srcDestName);
                    if (srcDestArray != null)
                    {
                        PdfObject pageObject = srcDestArray.Get(0);
                        if (pageObject is PdfNumber)
                        {
                            pageObject = GetDocument().GetPage(((PdfNumber)pageObject).IntValue() + 1).GetPdfObject();
                        }
                        foreach (PdfPage oldPage in page2page.Keys)
                        {
                            if (oldPage.GetPdfObject() == pageObject)
                            {
                                d = new PdfStringDestination(srcDestName);
                                if (!IsEqualSameNameDestExist(page2page, toDocument, srcDestName, srcDestArray, oldPage))
                                {
                                    // in the copiedArray old page ref will be correctly replaced by the new page ref as this page is already copied
                                    PdfArray copiedArray = (PdfArray)srcDestArray.CopyTo(toDocument, false);
                                    // here we can safely replace first item of the array because array of NamedDestination or StringDestination
                                    // never refers to page in another document via PdfNumber, but should always refer to page within current document
                                    // via page object reference.
                                    copiedArray.Set(0, page2page.Get(oldPage).GetPdfObject());
                                    toDocument.AddNamedDestination(srcDestName, copiedArray);
                                }
                                break;
                            }
                        }
                    }
                }
            }
            return(d);
        }
Ejemplo n.º 4
0
        public virtual void AddOutlinesWithNamedDestinations01()
        {
            String      filename = DESTINATION_FOLDER + "outlinesWithNamedDestinations01.pdf";
            PdfReader   reader   = new PdfReader(SOURCE_FOLDER + "iphone_user_guide.pdf");
            PdfWriter   writer   = new PdfWriter(filename);
            PdfDocument pdfDoc   = new PdfDocument(reader, writer);
            PdfArray    array1   = new PdfArray();

            array1.Add(pdfDoc.GetPage(2).GetPdfObject());
            array1.Add(PdfName.XYZ);
            array1.Add(new PdfNumber(36));
            array1.Add(new PdfNumber(806));
            array1.Add(new PdfNumber(0));
            PdfArray array2 = new PdfArray();

            array2.Add(pdfDoc.GetPage(3).GetPdfObject());
            array2.Add(PdfName.XYZ);
            array2.Add(new PdfNumber(36));
            array2.Add(new PdfNumber(806));
            array2.Add(new PdfNumber(1.25));
            PdfArray array3 = new PdfArray();

            array3.Add(pdfDoc.GetPage(4).GetPdfObject());
            array3.Add(PdfName.XYZ);
            array3.Add(new PdfNumber(36));
            array3.Add(new PdfNumber(806));
            array3.Add(new PdfNumber(1));
            pdfDoc.AddNamedDestination("test1", array2);
            pdfDoc.AddNamedDestination("test2", array3);
            pdfDoc.AddNamedDestination("test3", array1);
            PdfOutline root         = pdfDoc.GetOutlines(false);
            PdfOutline firstOutline = root.AddOutline("Test1");

            firstOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test1")));
            PdfOutline secondOutline = root.AddOutline("Test2");

            secondOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test2")));
            PdfOutline thirdOutline = root.AddOutline("Test3");

            thirdOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("test3")));
            pdfDoc.Close();
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, SOURCE_FOLDER + "cmp_outlinesWithNamedDestinations01.pdf"
                                                                             , DESTINATION_FOLDER, "diff_"));
        }
Ejemplo n.º 5
0
        public virtual void AddOutlinesWithNamedDestinations02()
        {
            String      filename = destinationFolder + "outlinesWithNamedDestinations02.pdf";
            PdfDocument pdfDoc   = new PdfDocument(new PdfWriter(filename));
            PdfArray    array1   = new PdfArray();

            array1.Add(pdfDoc.AddNewPage().GetPdfObject());
            array1.Add(PdfName.XYZ);
            array1.Add(new PdfNumber(36));
            array1.Add(new PdfNumber(806));
            array1.Add(new PdfNumber(0));
            PdfArray array2 = new PdfArray();

            array2.Add(pdfDoc.AddNewPage().GetPdfObject());
            array2.Add(PdfName.XYZ);
            array2.Add(new PdfNumber(36));
            array2.Add(new PdfNumber(806));
            array2.Add(new PdfNumber(1.25));
            PdfArray array3 = new PdfArray();

            array3.Add(pdfDoc.AddNewPage().GetPdfObject());
            array3.Add(PdfName.XYZ);
            array3.Add(new PdfNumber(36));
            array3.Add(new PdfNumber(806));
            array3.Add(new PdfNumber(1));
            pdfDoc.AddNamedDestination("page1", array2);
            pdfDoc.AddNamedDestination("page2", array3);
            pdfDoc.AddNamedDestination("page3", array1);
            PdfOutline root         = pdfDoc.GetOutlines(false);
            PdfOutline firstOutline = root.AddOutline("Test1");

            firstOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("page1")));
            PdfOutline secondOutline = root.AddOutline("Test2");

            secondOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("page2")));
            PdfOutline thirdOutline = root.AddOutline("Test3");

            thirdOutline.AddDestination(PdfDestination.MakeDestination(new PdfString("page3")));
            pdfDoc.Close();
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, sourceFolder + "cmp_outlinesWithNamedDestinations02.pdf"
                                                                             , destinationFolder, "diff_"));
        }
Ejemplo n.º 6
0
        private static void MergePdfsWithBookmarks(List <string> InFiles, string OutFile)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfWriter(OutFile));

            pdfDoc.InitializeOutlines();

            PdfMerger merger = new PdfMerger(pdfDoc, true, true);



            List <PdfOutline> listItem = new List <PdfOutline>();

            InFiles.ForEach(srcFile =>
            {
                PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(srcFile));
                int pageCount = firstSourcePdf.GetNumberOfPages();
                merger.Merge(firstSourcePdf, 1, pageCount);

                firstSourcePdf.GetOutlines(false).GetDestination();
                firstSourcePdf.Close();

                if (pageCount % 2 == 1)
                {
                    pdfDoc.AddNewPage(iTextPageSize.A4);
                }
            });

            PdfOutline rootOutline = pdfDoc.GetOutlines(false);

            listItem.AddRange(rootOutline.GetAllChildren());

            rootOutline.GetAllChildren().Clear();

            string     parentTitle = Path.GetFileNameWithoutExtension(OutFile);
            PdfOutline parent      = rootOutline.AddOutline(parentTitle);

            foreach (var item in listItem)
            {
                parent.AddOutline(item);
            }

            PdfExplicitDestination destToPage3 = PdfExplicitDestination.CreateFit(pdfDoc.GetFirstPage());
            string stringDest = Guid.NewGuid().ToString();

            pdfDoc.AddNamedDestination(stringDest, destToPage3.GetPdfObject());
            parent.AddAction(PdfAction.CreateGoTo(new PdfStringDestination(stringDest)));

            if (pdfDoc.GetNumberOfPages() % 2 == 1)
            {
                pdfDoc.AddNewPage(iTextPageSize.A4);
            }

            pdfDoc.Close();
        }
Ejemplo n.º 7
0
        internal virtual PdfDestination CopyDestination(PdfObject dest, IDictionary <PdfPage, PdfPage> page2page, PdfDocument
                                                        toDocument)
        {
            PdfDestination d = null;

            if (dest.IsArray())
            {
                PdfObject pageObject = ((PdfArray)dest).Get(0);
                foreach (PdfPage oldPage in page2page.Keys)
                {
                    if (oldPage.GetPdfObject() == pageObject)
                    {
                        // in the copiedArray old page ref will be correctly replaced by the new page ref as this page is already copied
                        PdfArray copiedArray = (PdfArray)dest.CopyTo(toDocument, false);
                        d = new PdfExplicitDestination(copiedArray);
                        break;
                    }
                }
            }
            else
            {
                if (dest.IsString())
                {
                    PdfNameTree destsTree = GetNameTree(PdfName.Dests);
                    IDictionary <String, PdfObject> dests = destsTree.GetNames();
                    String   srcDestName  = ((PdfString)dest).ToUnicodeString();
                    PdfArray srcDestArray = (PdfArray)dests.Get(srcDestName);
                    if (srcDestArray != null)
                    {
                        PdfObject pageObject = srcDestArray.Get(0);
                        foreach (PdfPage oldPage in page2page.Keys)
                        {
                            if (oldPage.GetPdfObject() == pageObject)
                            {
                                d = new PdfStringDestination(srcDestName);
                                if (!IsEqualSameNameDestExist(page2page, toDocument, srcDestName, srcDestArray, oldPage))
                                {
                                    // in the copiedArray old page ref will be correctly replaced by the new page ref as this page is already copied
                                    PdfArray copiedArray = (PdfArray)srcDestArray.CopyTo(toDocument, false);
                                    toDocument.AddNamedDestination(srcDestName, copiedArray);
                                }
                                break;
                            }
                        }
                    }
                }
            }
            return(d);
        }
Ejemplo n.º 8
0
        protected internal virtual void ApplyDestination(PdfDocument document)
        {
            String destination = this.GetProperty <String>(Property.DESTINATION);

            if (destination != null)
            {
                PdfArray array = new PdfArray();
                array.Add(document.GetPage(occupiedArea.GetPageNumber()).GetPdfObject());
                array.Add(PdfName.XYZ);
                array.Add(new PdfNumber(occupiedArea.GetBBox().GetX()));
                array.Add(new PdfNumber(occupiedArea.GetBBox().GetY() + occupiedArea.GetBBox().GetHeight
                                            ()));
                array.Add(new PdfNumber(1));
                document.AddNamedDestination(destination, ((PdfArray)array.MakeIndirect(document)
                                                           ));
                DeleteProperty(Property.DESTINATION);
            }
        }
Ejemplo n.º 9
0
        internal virtual PdfDestination CopyDestination(PdfObject dest, IDictionary <PdfPage, PdfPage> page2page, PdfDocument
                                                        toDocument)
        {
            PdfDestination d = null;

            if (dest.IsArray())
            {
                PdfObject pageObject = ((PdfArray)dest).Get(0);
                foreach (PdfPage oldPage in page2page.Keys)
                {
                    if (oldPage.GetPdfObject() == pageObject)
                    {
                        PdfArray array = new PdfArray((PdfArray)dest);
                        array.Set(0, page2page.Get(oldPage).GetPdfObject());
                        d = new PdfExplicitDestination(array);
                    }
                }
            }
            else
            {
                if (dest.IsString())
                {
                    PdfNameTree destsTree = GetNameTree(PdfName.Dests);
                    IDictionary <String, PdfObject> dests = destsTree.GetNames();
                    String   name  = ((PdfString)dest).ToUnicodeString();
                    PdfArray array = (PdfArray)dests.Get(name);
                    if (array != null)
                    {
                        PdfObject pageObject = array.Get(0);
                        foreach (PdfPage oldPage in page2page.Keys)
                        {
                            if (oldPage.GetPdfObject() == pageObject)
                            {
                                array.Set(0, page2page.Get(oldPage).GetPdfObject());
                                d = new PdfStringDestination(name);
                                toDocument.AddNamedDestination(name, array);
                            }
                        }
                    }
                }
            }
            return(d);
        }
Ejemplo n.º 10
0
        public virtual void DestTest01()
        {
            String            srcFile          = sourceFolder + "simpleNoLinks.pdf";
            String            outFile          = destinationFolder + "destTest01.pdf";
            String            cmpFile          = sourceFolder + "cmp_destTest01.pdf";
            PdfDocument       document         = new PdfDocument(new PdfReader(srcFile), new PdfWriter(outFile));
            PdfPage           firstPage        = document.GetPage(1);
            PdfLinkAnnotation linkExplicitDest = new PdfLinkAnnotation(new Rectangle(35, 785, 160, 15));

            linkExplicitDest.SetAction(PdfAction.CreateGoTo(PdfExplicitDestination.CreateFit(document.GetPage(2))));
            firstPage.AddAnnotation(linkExplicitDest);
            PdfLinkAnnotation      linkStringDest = new PdfLinkAnnotation(new Rectangle(35, 760, 160, 15));
            PdfExplicitDestination destToPage3    = PdfExplicitDestination.CreateFit(document.GetPage(3));
            String stringDest = "thirdPageDest";

            document.AddNamedDestination(stringDest, destToPage3.GetPdfObject());
            linkStringDest.SetAction(PdfAction.CreateGoTo(new PdfStringDestination(stringDest)));
            firstPage.AddAnnotation(linkStringDest);
            document.Close();
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(outFile, cmpFile, destinationFolder, "diff_"
                                                                             ));
        }
        public virtual void CreatePdf(String dest)
        {
            PdfDocument pdfDoc   = new PdfDocument(new PdfWriter(dest));
            Document    document = new Document(pdfDoc);

            document.Add(new Paragraph(new Text("The Revenant nominations list")).SetTextAlignment(TextAlignment.CENTER
                                                                                                   ));
            PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));

            foreach (KeyValuePair <String, int> entry in TheRevenantNominations)
            {
                //Copy page
                PdfPage page = firstSourcePdf.GetPage(entry.Value).CopyTo(pdfDoc);
                pdfDoc.AddPage(page);
                //Overwrite page number
                Text text = new Text(String.Format("Page {0}", pdfDoc.GetNumberOfPages() - 1));
                text.SetBackgroundColor(ColorConstants.WHITE);
                document.Add(new Paragraph(text).SetFixedPosition(pdfDoc.GetNumberOfPages(), 549, 742, 100));
                //Add destination
                String   destinationKey   = "p" + (pdfDoc.GetNumberOfPages() - 1);
                PdfArray destinationArray = new PdfArray();
                destinationArray.Add(page.GetPdfObject());
                destinationArray.Add(PdfName.XYZ);
                destinationArray.Add(new PdfNumber(0));
                destinationArray.Add(new PdfNumber(page.GetMediaBox().GetHeight()));
                destinationArray.Add(new PdfNumber(1));
                pdfDoc.AddNamedDestination(destinationKey, destinationArray);
                //Add TOC line with bookmark
                Paragraph p = new Paragraph();
                p.AddTabStops(new TabStop(540, TabAlignment.RIGHT, new DottedLine()));
                p.Add(entry.Key);
                p.Add(new Tab());
                p.Add((pdfDoc.GetNumberOfPages() - 1).ToString());
                p.SetProperty(Property.ACTION, PdfAction.CreateGoTo(destinationKey));
                document.Add(p);
            }
            firstSourcePdf.Close();
            //Add the last page
            PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
            PdfPage     page_1          = secondSourcePdf.GetPage(1).CopyTo(pdfDoc);

            pdfDoc.AddPage(page_1);
            //Add destination
            PdfArray destinationArray_1 = new PdfArray();

            destinationArray_1.Add(page_1.GetPdfObject());
            destinationArray_1.Add(PdfName.XYZ);
            destinationArray_1.Add(new PdfNumber(0));
            destinationArray_1.Add(new PdfNumber(page_1.GetMediaBox().GetHeight()));
            destinationArray_1.Add(new PdfNumber(1));
            pdfDoc.AddNamedDestination("checklist", destinationArray_1);
            //Add TOC line with bookmark
            Paragraph p_1 = new Paragraph();

            p_1.AddTabStops(new TabStop(540, TabAlignment.RIGHT, new DottedLine()));
            p_1.Add("Oscars\u00ae 2016 Movie Checklist");
            p_1.Add(new Tab());
            p_1.Add((pdfDoc.GetNumberOfPages() - 1).ToString());
            p_1.SetProperty(Property.ACTION, PdfAction.CreateGoTo("checklist"));
            document.Add(p_1);
            secondSourcePdf.Close();
            // close the document
            document.Close();
        }
Ejemplo n.º 12
0
        private static void MergePdfs(List <string> InFiles, string OutFile)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfWriter(OutFile));

            pdfDoc.InitializeOutlines();

            //PdfMerger merger = new PdfMerger(pdfDoc, false, false);

            PdfOutline rootOutline = pdfDoc.GetOutlines(true);
            string     parentTitle = Path.GetFileNameWithoutExtension(OutFile);
            PdfOutline parent      = rootOutline.AddOutline(parentTitle);


            //parent.AddAction(PdfAction.CreateGoTo(
            //        PdfExplicitRemoteGoToDestination.CreateFit(1)));



            int pageNumber = 0;

            foreach (var srcFile in InFiles)
            {
                string title = Path.GetFileNameWithoutExtension(srcFile);

                PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(srcFile));

                int pageCount = firstSourcePdf.GetNumberOfPages();

                for (int i = 1; i < pageCount + 1; i++)
                {
                    var page       = firstSourcePdf.GetPage(i);
                    int pageRotate = page.GetRotation();
                    if (pageRotate != 0)
                    {
                        page.SetRotation(0);
                    }
                    PdfPage newPage = firstSourcePdf.GetPage(i).CopyTo(pdfDoc);
                    pdfDoc.AddPage(newPage);
                }

                //merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());

                //firstSourcePdf.CopyPagesTo(1, firstSourcePdf.GetNumberOfPages(), pdfDoc);
                //int all = pdfDoc.GetNumberOfPages();

                PdfExplicitDestination dd = PdfExplicitDestination.CreateFit(pdfDoc.GetPage(pageNumber + 1));
                string tt = Guid.NewGuid().ToString();
                pdfDoc.AddNamedDestination(tt, dd.GetPdfObject());

                PdfOutline kid = parent.AddOutline(title);
                kid.AddAction(PdfAction.CreateGoTo(new PdfStringDestination(tt)));
                //kid.AddAction(PdfAction.CreateGoTo(
                //PdfExplicitRemoteGoToDestination.CreateFit(pageNumber)));

                var bb = parent.GetAllChildren();

                pageNumber += pageCount;
                firstSourcePdf.Close();

                if (pageCount % 2 == 1)
                {
                    pdfDoc.AddNewPage(iTextPageSize.A4);
                    pageNumber += 1;
                }
            }



            PdfExplicitDestination destToPage3 = PdfExplicitDestination.CreateFit(pdfDoc.GetFirstPage());
            string stringDest = Guid.NewGuid().ToString();

            pdfDoc.AddNamedDestination(stringDest, destToPage3.GetPdfObject());
            parent.AddAction(PdfAction.CreateGoTo(new PdfStringDestination(stringDest)));

            if (pdfDoc.GetNumberOfPages() % 2 == 1)
            {
                pdfDoc.AddNewPage(pageNumber, iTextPageSize.A4);
            }

            pdfDoc.Close();
        }