示例#1
0
        public void BookmarkLevels()
        {
            //ExStart
            //ExFor:BookmarksOutlineLevelCollection
            //ExFor:BookmarksOutlineLevelCollection.Add(String, Int32)
            //ExFor:BookmarksOutlineLevelCollection.Clear
            //ExFor:BookmarksOutlineLevelCollection.Contains(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Count
            //ExFor:BookmarksOutlineLevelCollection.IndexOfKey(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Item(System.Int32)
            //ExFor:BookmarksOutlineLevelCollection.Item(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Remove(System.String)
            //ExFor:BookmarksOutlineLevelCollection.RemoveAt(System.Int32)
            //ExFor:OutlineOptions.BookmarksOutlineLevels
            //ExSummary:Shows how to set outline levels for bookmarks.
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Insert a bookmark with another bookmark nested inside it.
            builder.StartBookmark("Bookmark 1");
            builder.Writeln("Text inside Bookmark 1.");

            builder.StartBookmark("Bookmark 2");
            builder.Writeln("Text inside Bookmark 1 and 2.");
            builder.EndBookmark("Bookmark 2");

            builder.Writeln("Text inside Bookmark 1.");
            builder.EndBookmark("Bookmark 1");

            // Insert another bookmark.
            builder.StartBookmark("Bookmark 3");
            builder.Writeln("Text inside Bookmark 3.");
            builder.EndBookmark("Bookmark 3");

            // When saving to .pdf, bookmarks can be accessed via a drop-down menu and used as anchors by most readers.
            // Bookmarks can also have numeric values for outline levels,
            // enabling lower level outline entries to hide higher-level child entries when collapsed in the reader.
            PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
            BookmarksOutlineLevelCollection outlineLevels = pdfSaveOptions.OutlineOptions.BookmarksOutlineLevels;

            outlineLevels.Add("Bookmark 1", 1);
            outlineLevels.Add("Bookmark 2", 2);
            outlineLevels.Add("Bookmark 3", 3);

            Assert.AreEqual(3, outlineLevels.Count);
            Assert.True(outlineLevels.Contains("Bookmark 1"));
            Assert.AreEqual(1, outlineLevels[0]);
            Assert.AreEqual(2, outlineLevels["Bookmark 2"]);
            Assert.AreEqual(2, outlineLevels.IndexOfKey("Bookmark 3"));

            // We can remove two elements so that only the outline level designation for "Bookmark 1" is left.
            outlineLevels.RemoveAt(2);
            outlineLevels.Remove("Bookmark 2");

            // There are nine outline levels. Their numbering will be optimized during the save operation.
            // In this case, levels "5" and "9" will become "2" and "3".
            outlineLevels.Add("Bookmark 2", 5);
            outlineLevels.Add("Bookmark 3", 9);

            doc.Save(ArtifactsDir + "BookmarksOutlineLevelCollection.BookmarkLevels.pdf", pdfSaveOptions);

            // Emptying this collection will preserve the bookmarks and put them all on the same outline level.
            outlineLevels.Clear();
            //ExEnd

            #if NET462 || NETCOREAPP2_1 || JAVA
            PdfBookmarkEditor bookmarkEditor = new PdfBookmarkEditor();
            bookmarkEditor.BindPdf(ArtifactsDir + "BookmarksOutlineLevelCollection.BookmarkLevels.pdf");

            Bookmarks bookmarks = bookmarkEditor.ExtractBookmarks();

            Assert.AreEqual(3, bookmarks.Count);
            Assert.AreEqual("Bookmark 1", bookmarks[0].Title);
            Assert.AreEqual("Bookmark 2", bookmarks[1].Title);
            Assert.AreEqual("Bookmark 3", bookmarks[2].Title);
            #endif
        }
        public void BookmarkLevels()
        {
            //ExStart
            //ExFor:BookmarksOutlineLevelCollection
            //ExFor:BookmarksOutlineLevelCollection.Add(String, Int32)
            //ExFor:BookmarksOutlineLevelCollection.Clear
            //ExFor:BookmarksOutlineLevelCollection.Contains(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Count
            //ExFor:BookmarksOutlineLevelCollection.IndexOfKey(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Item(System.Int32)
            //ExFor:BookmarksOutlineLevelCollection.Item(System.String)
            //ExFor:BookmarksOutlineLevelCollection.Remove(System.String)
            //ExFor:BookmarksOutlineLevelCollection.RemoveAt(System.Int32)
            //ExFor:OutlineOptions.BookmarksOutlineLevels
            //ExSummary:Shows how to set outline levels for bookmarks.
            // Open a blank document, create a DocumentBuilder, and use the builder to add some text wrapped inside bookmarks
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Note that whitespaces in bookmark names will be converted into underscores when saved to Microsoft Word formats
            // such as .doc and .docx, but will be preserved in other formats like .pdf or .xps
            builder.StartBookmark("Bookmark 1");
            builder.Writeln("Text inside Bookmark 1.");

            builder.StartBookmark("Bookmark 2");
            builder.Writeln("Text inside Bookmark 1 and 2.");
            builder.EndBookmark("Bookmark 2");

            builder.Writeln("Text inside Bookmark 1.");
            builder.EndBookmark("Bookmark 1");

            builder.StartBookmark("Bookmark 3");
            builder.Writeln("Text inside Bookmark 3.");
            builder.EndBookmark("Bookmark 3");

            // We can specify outline levels for our bookmarks so that they show up in the table of contents and are indented by an amount
            // of space proportional to the indent level in a SaveOptions object
            // Some pdf/xps readers such as Google Chrome also allow the collapsing of all higher level bookmarks by adjacent lower level bookmarks
            // This feature applies to .pdf or .xps file formats, so only their respective SaveOptions subclasses will support it
            PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
            BookmarksOutlineLevelCollection outlineLevels = pdfSaveOptions.OutlineOptions.BookmarksOutlineLevels;

            outlineLevels.Add("Bookmark 1", 1);
            outlineLevels.Add("Bookmark 2", 2);
            outlineLevels.Add("Bookmark 3", 3);

            Assert.AreEqual(3, outlineLevels.Count);
            Assert.True(outlineLevels.Contains("Bookmark 1"));
            Assert.AreEqual(1, outlineLevels[0]);
            Assert.AreEqual(2, outlineLevels["Bookmark 2"]);
            Assert.AreEqual(2, outlineLevels.IndexOfKey("Bookmark 3"));

            // We can remove two elements so that only the outline level designation for "Bookmark 1" is left
            outlineLevels.RemoveAt(2);
            outlineLevels.Remove("Bookmark 2");

            // We have 9 bookmark levels to work with, and bookmark levels are also sorted in ascending order,
            // and get numbered in succession along that order
            // Practically this means that our three levels "1, 5, 9", will be seen as "1, 2, 3" in the output
            outlineLevels.Add("Bookmark 2", 5);
            outlineLevels.Add("Bookmark 3", 9);

            // Save the document as a .pdf and find links to the bookmarks and their outline levels
            doc.Save(ArtifactsDir + "BookmarksOutlineLevelCollection.BookmarkLevels.pdf", pdfSaveOptions);

            // We can empty this dictionary to remove the contents table
            outlineLevels.Clear();
            //ExEnd

            #if NETFRAMEWORK || NETSTANDARD2_0
            // Bind pdf with Aspose.Pdf
            PdfBookmarkEditor bookmarkEditor = new PdfBookmarkEditor();
            bookmarkEditor.BindPdf(ArtifactsDir + "BookmarksOutlineLevelCollection.BookmarkLevels.pdf");

            // Get all bookmarks from the document
            Bookmarks bookmarks = bookmarkEditor.ExtractBookmarks();

            Assert.AreEqual(3, bookmarks.Count);

            // Assert that all the bookmarks title are with whitespaces
            Assert.AreEqual("Bookmark 1", bookmarks[0].Title);
            Assert.AreEqual("Bookmark 2", bookmarks[1].Title);
            Assert.AreEqual("Bookmark 3", bookmarks[2].Title);
            #endif
        }