←Select platform

ParseDocumentStructure Method

Summary
Parses the Table of Content and internal links or jumps between the pages of the PDF file associated with this PDFDocument.
Syntax
C#
C++/CLI
Java
Python
public void ParseDocumentStructure( 
   PDFParseDocumentStructureOptions options 
) 
public void parseDocumentStructure( 
   int options 
); 
public: 
void ParseDocumentStructure(  
   PDFParseDocumentStructureOptions options 
)  
def ParseDocumentStructure(self,options): 

Parameters

options
Document structure parsing options.

Remarks

Use ParseDocumentStructure to parse the document structure of the PDF document. The document structure is the Table of Contents (TOC) represented by a list of PDF bookmark objects stored in the Bookmarks property and the internal links between pages (or jumps) found in the document stored in the InternalLinks property.

When you create a new PDFDocument object from a PDF file on disk, the Bookmarks and InternalLinks properties will not be parsed automatically and their values will be null. To read these values, you must use ParseDocumentStructure. When this method returns, the Bookmarks property will be populated with a list of PDFBookmark objects for each bookmark item found in the document (or an empty list if the document does not contain any bookmarks). Similarly, the InternalLinks property will be populated with a list of PDFInternalLink objects for each internal link or jump between the pages found in the document (or an empty list of no such items exist).

options controls which items to parse. You can parse the bookmarks only, internal links only, any other values or all.

To write bookmarks to a PDF file, use the PDFFile.WriteBookmarks method.

Example

This example will read the document structure of a PDF file.

C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Controls; 
using Leadtools.Pdf; 
using Leadtools.Svg; 
using Leadtools.WinForms; 
 
 
public void PDFDocumentParseDocumentStructureExample() 
{ 
   string pdfFileName1 = Path.Combine(LEAD_VARS.ImagesDir, @"Leadtools.pdf"); 
   string pdfFileName2 = Path.Combine(LEAD_VARS.ImagesDir, @"Bookmarks.pdf"); 
 
   // Create a version of the source file with a few bookmarks 
   PDFFile file = new PDFFile(pdfFileName1); 
   // Load the pages 
   file.Load(); 
   List<PDFBookmark> bookmarks = new List<PDFBookmark>(); 
 
   // We will bookmarks for each page, cascading levels: 
   // Goto page 1 
   //    Goto page 2 
   //       Goto page 3 
   //          Goto page 4 
   int level = 0; 
   for (int i = 0; i < file.Pages.Count; i++) 
   { 
      PDFFilePage page = file.Pages[i]; 
 
      PDFBookmark bookmark = new PDFBookmark(); 
      bookmark.Title = "Goto page " + page.PageNumber.ToString(); 
      bookmark.BookmarkStyle = PDFBookmarkStyle.Plain; 
      bookmark.Level = level; 
      bookmark.TargetPageNumber = page.PageNumber; 
      bookmark.TargetPageFitType = PDFPageFitType.Default; 
      bookmark.TargetPosition = new PDFPoint(0, page.Height); 
      bookmark.TargetZoomPercent = 0; 
      bookmarks.Add(bookmark); 
 
      level++; 
      if (level > 8) 
      { 
         // Reset levels 
         level = 0; 
      } 
   } 
 
   file.WriteBookmarks(bookmarks, pdfFileName2); 
 
   // Create a document for the output file 
   using (PDFDocument document = new PDFDocument(pdfFileName2)) 
   { 
      // Now read the bookmarks and internal links in the document 
      document.ParseDocumentStructure(PDFParseDocumentStructureOptions.InternalLinks | PDFParseDocumentStructureOptions.Bookmarks); 
 
      Console.WriteLine("{0} bookmarks found:", document.Bookmarks.Count); 
      foreach (PDFBookmark bookmark in document.Bookmarks) 
      { 
         Console.WriteLine(" Title: {0}, Level: {1}, Target page: {2}", bookmark.Title, bookmark.Level, bookmark.TargetPageNumber); 
      } 
 
      Console.WriteLine("{0} Internal links found:", document.InternalLinks.Count); 
      foreach (PDFInternalLink internalLink in document.InternalLinks) 
      { 
         Console.WriteLine(" Source bounds: {0}, Target page: {1}", internalLink.SourceBounds, internalLink.TargetPageNumber); 
      } 
   } 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import java.io.BufferedWriter; 
import java.io.Console; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.nio.Buffer; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.StandardOpenOption; 
import java.sql.Date; 
import java.text.SimpleDateFormat; 
import java.time.LocalDateTime; 
import java.util.ArrayList; 
import java.util.List; 
 
import javax.xml.validation.Schema; 
 
import org.apache.lucene.store.Directory; 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import static org.junit.Assert.*; 
 
import leadtools.*; 
import leadtools.barcode.*; 
import leadtools.codecs.*; 
import leadtools.pdf.*; 
import leadtools.svg.*; 
 
 
public void pdfDocumentParseDocumentStructureExample() { 
   String LEAD_VARS_ImagesDir = "C:\\LEADTOOLS23\\Resources\\Images"; 
   String pdfFileName1 = combine(LEAD_VARS_ImagesDir, "Leadtools.pdf"); 
   String pdfFileName2 = combine(LEAD_VARS_ImagesDir, "Bookmarks.pdf"); 
 
   // Create a version of the source file with a few bookmarks 
   PDFFile file = new PDFFile(pdfFileName1); 
   // Load the pages 
   file.load(); 
   ArrayList<PDFBookmark> bookmarks = new ArrayList<PDFBookmark>(); 
 
   // We will bookmarks for each page, cascading levels: 
   // Goto page 1 
   // Goto page 2 
   // Goto page 3 
   // Goto page 4 
   int level = 0; 
   for (int i = 0; i < file.getPageCount(); i++) { 
 
      PDFFilePage page = file.getPages().get(i); 
      PDFBookmark bookmark = new PDFBookmark(); 
      bookmark.setTitle("Goto page " + page.getPageNumber()); 
      bookmark.setBookmarkStyle(PDFBookmarkStyle.PLAIN); 
      bookmark.setLevel(level); 
      bookmark.setTargetPageNumber(page.getPageNumber()); 
      bookmark.setTargetPageFitType(PDFPageFitType.DEFAULT); 
      bookmark.setTargetPosition(new PDFPoint(0, page.getHeight())); 
      bookmark.setTargetZoomPercent(0); 
      bookmarks.add(bookmark); 
 
      level++; 
      if (level > 8) { 
         // Reset levels 
         level = 0; 
      } 
 
   } 
   file.writeBookmarks(bookmarks, pdfFileName2); 
 
   // Create a document for the output file 
   PDFDocument document = new PDFDocument(pdfFileName2); 
   // Now read the bookmarks and internal links in the document 
   document.parseDocumentStructure(PDFParseDocumentStructureOptions.INTERNAL_LINKS.getValue() 
         | PDFParseDocumentStructureOptions.BOOKMARKS.getValue()); 
 
   System.out.printf("%1s bookmarks found:%n", document.getBookmarks().size()); 
   assertTrue(document.getBookmarks().size() == 25); 
   for (PDFBookmark bookmark : document.getBookmarks()) { 
      System.out.printf(" Title: %1s, Level: %2s, Target page: %3s%n", bookmark.getTitle(), bookmark.getLevel(), 
            bookmark.getTargetPageNumber()); 
   } 
 
   System.out.printf("%1s Internal links found:%n", document.getInternalLinks().size()); 
   assertTrue(document.getInternalLinks().size() == 18); 
   for (PDFInternalLink internalLink : document.getInternalLinks()) { 
      System.out.printf(" Source bounds: %1s, Target page: %2s%n", internalLink.getSourceBounds(), 
            internalLink.getTargetPageNumber()); 
   } 
 
} 
Requirements

Target Platforms

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Pdf Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.