// Loop through all the pages in the document creating bookmark items for them private static void loadBookmarks(Document activeDocument, ref List <PDFBookmark> bookmarks, Hashtable options) { var pages = activeDocument.Pages; if (pages.Count > 0) { // Create a top-level bookmark var parentBookmark = new PDFBookmark(); parentBookmark.title = (string)options["original_basename"]; parentBookmark.page = 1; parentBookmark.children = new List <PDFBookmark>(); foreach (var p in pages) { var bookmark = new PDFBookmark(); bookmark.page = ((Page)p).PageIndex; bookmark.title = ((Page)p).Name; parentBookmark.children.Add(bookmark); Converter.releaseCOMObject(p); } Converter.releaseCOMObject(pages); bookmarks.Add(parentBookmark); } }
// Loop through all the slides in the presentation creating bookmark items // for all the slides that are not hidden private static void loadBookmarks(Presentation activePresentation, ref List <PDFBookmark> bookmarks) { var slides = activePresentation.Slides; if (slides.Count > 0) { var page = 1; // Create a top-level bookmark var parentBookmark = new PDFBookmark(); parentBookmark.title = activePresentation.Name; parentBookmark.page = 1; parentBookmark.children = new List <PDFBookmark>(); // Loop through the slides, adding a ToC entry to the top-level bookmark foreach (var s in slides) { // Look at the transition on the slide to determine if it is hidden var trans = ((Slide)s).SlideShowTransition; if (trans.Hidden == MSCore.MsoTriState.msoCTrue || trans.Hidden == MSCore.MsoTriState.msoTrue) { Converter.releaseCOMObject(trans); Converter.releaseCOMObject(s); continue; } Converter.releaseCOMObject(trans); // Create a new bookmark and add the page var bookmark = new PDFBookmark(); bookmark.page = page++; // Work out a title - base this on the slide name and any title shape text var slideName = ((Slide)s).Name; var shapes = ((Slide)s).Shapes; // See if there is a title in the slides shapes if (shapes.HasTitle == MSCore.MsoTriState.msoTrue || shapes.HasTitle == MSCore.MsoTriState.msoCTrue) { var shapeTitle = shapes.Title; if (shapeTitle != null && (shapeTitle.HasTextFrame == MSCore.MsoTriState.msoCTrue || shapeTitle.HasTextFrame == MSCore.MsoTriState.msoTrue)) { var textframe = shapeTitle.TextFrame; if (textframe != null && (textframe.HasText == MSCore.MsoTriState.msoTrue || textframe.HasText == MSCore.MsoTriState.msoCTrue)) { var textrange = textframe.TextRange; if (!String.IsNullOrWhiteSpace(textrange.TrimText().Text)) { slideName = textrange.TrimText().Text; } Converter.releaseCOMObject(textrange); } Converter.releaseCOMObject(textframe); } Converter.releaseCOMObject(shapeTitle); } Converter.releaseCOMObject(shapes); bookmark.title = String.Format("Page {0} - {1}", bookmark.page, slideName); // Put the bookmark into our parent bookmark children parentBookmark.children.Add(bookmark); // Clean up the references to the slide Converter.releaseCOMObject(s); } // Add the top-level bookmark which will be passed back to the main program bookmarks.Add(parentBookmark); } Converter.releaseCOMObject(slides); }