Manages the structure of the document.
[DataContractAttribute()]
public class DocumentStructure
DocumentStructure manages the structure of the document. This includes the bookmarks that represents the table of content. It can be accessed through the Structure property of LEADDocument.
Not all document types contain support for document structure. For these types of documents (such as TIF file or Text document), the value of IsStructureSupported of Document will be false and the Structure is null and should not be used. The rest of the discussion of this section is related to when IsStructureSupported is true.
When the structure is supported (for example, PDF documents), the value of IsStructureSupported is true and Structure is a valid object can be used.
Loading the document structure can take some time, therefore, it is not read automatically when a new LEADDocument is created from a disk or URL document. This is done so that the document is loaded as quick as possible and to not make the user wait if the bookmarks or table of content is not needed in your application.
To parse the document for bookmarks and table of content, use the Parse method while the value of ParseBookmarks is true (the default value). Usually you can call this method once after the LEADDocument is loaded. The IsParsed property can be used to check if the structure has been parsed.
If Parse is not called or the value of ParseBookmarks is false, then Bookmarks is an empty list. You can use it to add bookmarks if this is a brand new document that was obtained through DocumentFactory.Create in preparation to save.
When Parse is called and ParseBookmarks is true (the default value), the Bookmarks list will be updated with all the bookmarks and table of content items found in the original document. You can then read and modify these bookmarks if needed. If the value of ParseBookmarks is set to false, then Parse will not try to parse the bookmarks in the document.
Parse will also parse the document for any links found in the pages if the value of ParsePageLinks is true (the default value), these links can be obtain through the DocumentPage.GetLinks method. If the value of ParsePageLinks is set to false, then Parse will not try to parse the links found in the pages.
Setting ParseBookmarks or ParsePageLinks to false can help with increasing the speed of the Parse method if the user is not interested in one or the other.
using Leadtools;
using Leadtools.Caching;
using Leadtools.Document;
public void DocumentExample()
{
var cache = GetCache();
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now + new TimeSpan(0, 0, 1);
policy.SlidingExpiration = new TimeSpan(0, 0, 1);
var options = new LoadDocumentOptions();
options.CachePolicy = policy;
options.Cache = cache;
if(options.Cache == null)
{
options.Cache = DocumentFactory.Cache;
}
string documentId = null;
using (var document = DocumentFactory.LoadFromFile(Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.pdf"), options))
{
document.GetDocumentFileName();
document.IsReadOnly = false;
document.AutoDeleteFromCache = false;
// DocumentImages reference
document.Images.DefaultBitsPerPixel = 24;
Console.WriteLine(document.Images.IsResolutionsSupported);
Console.WriteLine(document.Images.IsSvgSupported);
// Check if the document has a stream in memory
if (document.HasStream)
{
// Get the document stream
document.GetDocumentStream();
}
// Indicate whether the document is using the cache or not
Console.WriteLine(document.HasCache);
//Indicate if the document was downloaded
Console.WriteLine(document.IsDownloaded);
// Gets a value that determines whether the document structure is supported
Console.WriteLine(document.IsStructureSupported);
// Output metadata values (DocumentMetadata reference)
Console.WriteLine(document.Metadata.Values.Count);
// Get the Mime type of the document
Console.WriteLine(document.MimeType);
// Parse document structure data (DocumentStructure reference)
foreach(DocumentBookmark bookmark in document.Structure.Bookmarks)
{
bookmark.Title = null;
bookmark.FontStyles = DocumentFontStyles.Normal;
document.Structure.Bookmarks.Add(bookmark);
Console.WriteLine(bookmark.Children);
Console.WriteLine(bookmark.Target);
Console.WriteLine(document.Structure.Bookmarks.Count);
Console.WriteLine(document.Structure.IsParsed);
Console.WriteLine(document.Structure.ParseBookmarks);
}
document.Structure.Parse();
// Get the document URI
Console.WriteLine(document.Uri);
// Get each DocumentPage object (DocumentPage & DocumentPages reference)
foreach (DocumentPage page in document.Pages)
{
// Get the page as a raster image at the specified resolution
page.GetImage(0);
// Get the page as an Svg with specified options
page.GetSvg(null);
// Flip this page horizontally
page.Reverse();
// Use this method to add an array of links for this page
page.SetLinks(null);
page.IsLinksModified = false;
page.Resolution = 0;
page.ViewPerspective = RasterViewPerspective.TopLeft;
page.SetLinks(page.GetLinks());
Console.WriteLine($"Page Number: {page.PageNumber}, Original PageNumber: {page.OriginalPageNumber}, Size of the page: {page.Size}");
}
PrintOutDocumentInfo(document);
documentId = document.DocumentId;
document.SaveToCache();
}
System.Threading.Thread.Sleep(2000);
var loadFromCacheOptions = new LoadFromCacheOptions();
loadFromCacheOptions.Cache = cache;
loadFromCacheOptions.DocumentId = documentId;
using (var document = DocumentFactory.LoadFromCache(loadFromCacheOptions))
{
if (null == document)
{
Console.WriteLine("Cached document was expired and deleted!");
}
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}