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); }
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_")); }
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); }
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_")); }
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_")); }
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(); }
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); }
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); } }
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); }
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(); }
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(); }