public void GetPageDetails_IfPdfPageHasGoToLink_ObjectEditionPageHasGoToLink() { // Arrange const int page01Index = 0; var pdfDoc = new PDFDoc(); try { var pdfPage01 = pdfDoc.PageCreate(); var pdfPage02 = pdfDoc.PageCreate(); pdfDoc.PagePushBack(pdfPage01); pdfDoc.PagePushBack(pdfPage02); // create annot of pdfPage01 // goto type of annot links to pdfPage02 var destination = Destination.CreateFit(pdfPage02); var gotoAction = PDFAction.CreateGoto(destination); var linkAnnot = Annot.CreateLink(pdfDoc, new Rect(X1, Y1, X2, Y2), gotoAction); pdfPage01.AnnotInsert(0, linkAnnot); // Act _testEntityPrivate.Invoke(GetPageDetailsMethodName, pdfDoc); } finally { pdfDoc.Dispose(); } // Assert var page01LinkCollection = _objectEdition.PageCollection[page01Index].LinkCollection; var page01Links = ConvertToLinkArray(page01LinkCollection); page01Links.ShouldSatisfyAllConditions( () => page01Links.Length.ShouldBe(1), () => page01Links.ShouldContain(link => link.LinkType == GoToLinkType)); }
static void AnnotationLowLevelAPI(PDFDoc doc) { Page page = doc.GetPage(1); Obj annots = page.GetAnnots(); if (annots == null) { // If there are no annotations, create a new annotation // array for the page. annots = doc.CreateIndirectArray(); page.GetSDFObj().Put("Annots", annots); } // Create the Text annotation Obj text_annot = doc.CreateIndirectDict(); text_annot.PutName("Subtype", "Text"); text_annot.PutBool("Open", true); text_annot.PutString("Contents", "The quick brown fox ate the lazy mouse."); text_annot.PutRect("Rect", 266, 116, 430, 204); // Insert the annotation in the page annotation array annots.PushBack(text_annot); // Create a Link annotation Obj link1 = doc.CreateIndirectDict(); link1.PutName("Subtype", "Link"); Destination dest = Destination.CreateFit(doc.GetPage(2)); link1.Put("Dest", dest.GetSDFObj()); link1.PutRect("Rect", 85, 705, 503, 661); annots.PushBack(link1); // Create another Link annotation Obj link2 = doc.CreateIndirectDict(); link2.PutName("Subtype", "Link"); Destination dest2 = Destination.CreateFit(doc.GetPage(3)); link2.Put("Dest", dest2.GetSDFObj()); link2.PutRect("Rect", 85, 638, 503, 594); annots.PushBack(link2); // Note that PDFNet APi can be used to modify existing annotations. // In the following example we will modify the second link annotation // (link2) so that it points to the 10th page. We also use a different // destination page fit type. link2.Put("Dest", Destination.CreateXYZ(doc.GetPage(10), 100, 792 - 70, 10).GetSDFObj()); // Create a third link annotation with a hyperlink action (all other // annotation types can be created in a similar way) Obj link3 = doc.CreateIndirectDict(); link3.PutName("Subtype", "Link"); link3.PutRect("Rect", 85, 570, 503, 524); // Create a URI action Obj action = link3.PutDict("A"); action.PutName("S", "URI"); action.PutString("URI", "http://www.pdftron.com"); annots.PushBack(link3); }
/// <summary> /// The main entry point for the application. /// </summary> static void Main(string[] args) { PDFNet.Initialize(); // Relative path to the folder containing test files. string input_path = "../../TestFiles/"; string output_path = "../../TestFiles/Output/"; // The following example illustrates how to create and edit the outline tree // using high-level Bookmark methods. try { using (PDFDoc doc = new PDFDoc(input_path + "numbered.pdf")) { doc.InitSecurityHandler(); // Lets first create the root bookmark items. Bookmark red = Bookmark.Create(doc, "Red"); Bookmark green = Bookmark.Create(doc, "Green"); Bookmark blue = Bookmark.Create(doc, "Blue"); doc.AddRootBookmark(red); doc.AddRootBookmark(green); doc.AddRootBookmark(blue); // You can also add new root bookmarks using Bookmark.AddNext("...") blue.AddNext("foo"); blue.AddNext("bar"); // We can now associate new bookmarks with page destinations: // The following example creates an 'explicit' destination (see // section '8.2.1 Destinations' in PDF Reference for more details) Destination red_dest = Destination.CreateFit(doc.GetPage(1)); red.SetAction(pdftron.PDF.Action.CreateGoto(red_dest)); // Create an explicit destination to the first green page in the document green.SetAction(pdftron.PDF.Action.CreateGoto( Destination.CreateFit(doc.GetPage(10)))); // The following example creates a 'named' destination (see // section '8.2.1 Destinations' in PDF Reference for more details) // Named destinations have certain advantages over explicit destinations. String key = "blue1"; pdftron.PDF.Action blue_action = pdftron.PDF.Action.CreateGoto(key, Destination.CreateFit(doc.GetPage(19))); blue.SetAction(blue_action); // We can now add children Bookmarks Bookmark sub_red1 = red.AddChild("Red - Page 1"); sub_red1.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(1)))); Bookmark sub_red2 = red.AddChild("Red - Page 2"); sub_red2.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(2)))); Bookmark sub_red3 = red.AddChild("Red - Page 3"); sub_red3.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(3)))); Bookmark sub_red4 = sub_red3.AddChild("Red - Page 4"); sub_red4.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(4)))); Bookmark sub_red5 = sub_red3.AddChild("Red - Page 5"); sub_red5.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(5)))); Bookmark sub_red6 = sub_red3.AddChild("Red - Page 6"); sub_red6.SetAction(pdftron.PDF.Action.CreateGoto(Destination.CreateFit(doc.GetPage(6)))); // Example of how to find and delete a bookmark by title text. Bookmark foo = doc.GetFirstBookmark().Find("foo"); if (foo.IsValid()) { foo.Delete(); } Bookmark bar = doc.GetFirstBookmark().Find("bar"); if (bar.IsValid()) { bar.Delete(); } // Adding color to Bookmarks. Color and other formatting can help readers // get around more easily in large PDF documents. red.SetColor(1, 0, 0); green.SetColor(0, 1, 0); green.SetFlags(2); // set bold font blue.SetColor(0, 0, 1); blue.SetFlags(3); // set bold and italic doc.Save(output_path + "bookmark.pdf", 0); Console.WriteLine("Done. Result saved in bookmark.pdf"); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } // The following example illustrates how to traverse the outline tree using // Bookmark navigation methods: Bookmark.GetNext(), Bookmark.GetPrev(), // Bookmark.GetFirstChild () and Bookmark.GetLastChild (). try { // Open the document that was saved in the previous code sample using (PDFDoc doc = new PDFDoc(output_path + "bookmark.pdf")) { doc.InitSecurityHandler(); Bookmark root = doc.GetFirstBookmark(); PrintOutlineTree(root); Console.WriteLine("Done."); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } // The following example illustrates how to create a Bookmark to a page // in a remote document. A remote go-to action is similar to an ordinary // go-to action, but jumps to a destination in another PDF file instead // of the current file. See Section 8.5.3 'Remote Go-To Actions' in PDF // Reference Manual for details. try { using (PDFDoc doc = new PDFDoc(output_path + "bookmark.pdf")) { doc.InitSecurityHandler(); // Create file specification (the file referred to by the remote bookmark) Obj file_spec = doc.CreateIndirectDict(); file_spec.PutName("Type", "Filespec"); file_spec.PutString("F", "bookmark.pdf"); FileSpec spec = new FileSpec(file_spec); pdftron.PDF.Action goto_remote = pdftron.PDF.Action.CreateGotoRemote(spec, 5, true); Bookmark remoteBookmark1 = Bookmark.Create(doc, "REMOTE BOOKMARK 1"); remoteBookmark1.SetAction(goto_remote); doc.AddRootBookmark(remoteBookmark1); // Create another remote bookmark, but this time using the low-level SDF/Cos API. Bookmark remoteBookmark2 = Bookmark.Create(doc, "REMOTE BOOKMARK 2"); doc.AddRootBookmark(remoteBookmark2); Obj gotoR = remoteBookmark2.GetSDFObj().PutDict("A"); { // Create the 'Action' dictionary. gotoR.PutName("S", "GoToR"); // Set action type gotoR.PutBool("NewWindow", true); // Set the file specification gotoR.Put("F", file_spec); // Set the destination. Obj dest = gotoR.PutArray("D"); dest.PushBackNumber(9); // jump to the tenth page. Note that Acrobat indexes pages from 0. dest.PushBackName("Fit"); // Fit the page } doc.Save(output_path + "bookmark_remote.pdf", SDFDoc.SaveOptions.e_linearized); Console.WriteLine("Done. Result saved in bookmark_remote.pdf"); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } }