The JSON serializable object that describes a document.
public DocumentDescriptor Descriptor { get; set; }
JSON serializable object that describes a document.
DocumentDescriptor is a class that holds JSON data that describes a document. This data can be obtained from any document using LEADDocument.CreateDocumentDescriptor and the document can then be disposed. At a later time, DocumentFactory.Create can be called with this descriptor object set in CreateDocumentOptions.Descriptor to regenerate the original document. LEADDocument.UpdateFromDocumentDescriptor can be used to update an existing document from a descriptor.
This technique is used by LEADTOOLS Document Web Service as follows:
The user creates a new document using JavaScript.
The document is manipulated at the JavaScript side, for example, pages are added or removed and the document could be set in the document viewer for display
During this whole process, the document exists only on the client side - it is not save to the server cache.
When ready, the user calls DocumentFactory.saveToCache
from the JavaScript code. Here, the JavaScript toolkit library will create
a DocumentDescriptor object and send it to the Documents service method SaveToCache
The service will try first to load the document from the cache, if it does not exist (when this is the first call to save this document), it will then use DocumentFactory.Create with CreateDocumentOptions.Descriptor set to the object passed into the request by JavaScript. If the document exists, then LEADDocument.UpdateFromDocumentDescriptor is called to update the document object from the JavaScript object in case it has changed (subsequent calls to LEADDocument.SaveToCache for this document).
Finally, LEADDocument.SaveToCache is called to save the updated document into the cache
DocumentId is not used if Descriptor is not null. Instead, the document creation data along with its ID is stored in the DocumentDescriptor object set in the method.
using Leadtools;
using Leadtools.Caching;
using Leadtools.Document;
public void DocumentFactoryCreateExample()
{
var cache = GetCache();
// Create a new document
var createOptions = new CreateDocumentOptions();
createOptions.Cache = cache;
createOptions.Descriptor = null;
createOptions.MimeType = null;
createOptions.UseCache = true;
createOptions.UserId = null;
Console.WriteLine("Cache Policy: {0}", createOptions.CachePolicy.AbsoluteExpiration);
string documentId = null;
using (LEADDocument document = DocumentFactory.Create(createOptions))
{
document.Name = "Virtual";
// Should have 0 pages and documents
System.Diagnostics.Debug.Assert(document.Pages.Count == 0);
System.Diagnostics.Debug.Assert(document.Documents.Count == 0); // DocumentDocuments reference
// Add page 1 and 2 from a PDF file
LoadDocumentOptions loadOptions = new LoadDocumentOptions();
loadOptions.Cache = cache;
LEADDocument childDocument = DocumentFactory.LoadFromFile(Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.pdf"), loadOptions);
// Do not dispose the child documents, but save it into the cache
// This is optional and is done in this example since we will try to re-load the parent document
// from the cache - and the child documents should be in the cache as well
childDocument.SaveToCache();
// Now add the pages
document.Pages.Add(childDocument.Pages[0]);
document.Pages.Add(childDocument.Pages[1]);
// Add an empty page
var documentPage = document.Pages.CreatePage(LeadSizeD.Create(LEADDocument.UnitsPerInch * 8.5, LEADDocument.UnitsPerInch * 11), 300);
document.Pages.Add(documentPage);
// Add page 3 and 4 from a TIF file
childDocument = DocumentFactory.LoadFromFile(Path.Combine(LEAD_VARS.ImagesDir, "ocr1.tif"), loadOptions);
// Also save it into the cache
childDocument.SaveToCache();
// Now add the pages
document.Pages.Add(childDocument.Pages[0]);
document.Pages.Add(childDocument.Pages[0]);
// Should have 5 pages and 2 documents (the PDF and the TIF)
System.Diagnostics.Debug.Assert(document.Pages.Count == 5);
System.Diagnostics.Debug.Assert(document.Documents.Count == 2);
// Tell the parent document to dispose any child documents when the parent is disposed
document.AutoDisposeDocuments = true;
// Show the info of this document, should say 5 pages
Console.WriteLine("Original document information");
PrintOutDocumentInfo(document);
// Now save, the parent document into the cache
document.SaveToCache();
// And tell all documents to not delete themselves from the cache
document.AutoDeleteFromCache = false;
// Save the ID so we can load it
documentId = document.DocumentId;
}
// Now, load the document from the cache
var loadFromCacheOptions = new LoadFromCacheOptions();
loadFromCacheOptions.Cache = cache;
loadFromCacheOptions.DocumentId = documentId;
using (LEADDocument document = DocumentFactory.LoadFromCache(loadFromCacheOptions))
{
// Should have 5 pages and 2 documents (the PDF and the TIF)
System.Diagnostics.Debug.Assert(document.Pages.Count == 5);
System.Diagnostics.Debug.Assert(document.Documents.Count == 2);
// Show the info of this document, should still say 5 pages
Console.WriteLine("Loaded from cache information");
PrintOutDocumentInfo(document);
// Delete first page
document.Pages.RemoveAt(0);
// Delete the last page
document.Pages.RemoveAt(document.Pages.Count - 1);
// Should have 3 pages and 2 documents (the PDF and the TIF)
System.Diagnostics.Debug.Assert(document.Pages.Count == 3);
System.Diagnostics.Debug.Assert(document.Documents.Count == 2);
Console.WriteLine("After removing the first 2 pages");
PrintOutDocumentInfo(document);
// Delete this document and all its children from the cache when we are disposed
document.AutoDeleteFromCache = true;
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}