Options to use when downloading a document.
[SerializableAttribute()][DataContractAttribute()]public class DownloadDocumentOptions
DocumentFactory.DownloadDocument is used to download the data of a document stored in the cache, either all at one time, or in chunks. This method takes an instance of DownloadDocumentOptions as a parameter, indicating the document properties and download options as follows:
| Member | Description |
|---|---|
| Cache | The cache containing the document to download. This value must not be null |
| DocumentId | ID of the document to download. This value must not be null |
| Offset | 0-based byte offset into the source data at which to begin reading the data |
| Length | Maximum number of bytes to read during this download operation. If this value -1, then reading is performed until the data end is reached |
| Data or Stream | Target to where store the document data into |
| DataOffset | Only Data is used to indicate where in the buffer storing starts |
DocumentFactory.DownloadAnnotations is used to download the annotations associated with a document. This method also takes an instance of DownloadDocumentOptions where the source data refers to the annotation instead of the document data.
using Leadtools;using Leadtools.Codecs;using Leadtools.Document.Writer;using Leadtools.Document;using Leadtools.Caching;using Leadtools.Annotations.Engine;using Leadtools.Ocr;using Leadtools.Barcode;using Leadtools.Document.Converter;public void DownloadDocumentExample(){var documentUri = new Uri("https://demo.leadtools.com/images/pdf/leadtools.pdf");string documentFile1 = Path.Combine(LEAD_VARS.ImagesDir, "downloaded1.pdf");string documentFile2 = Path.Combine(LEAD_VARS.ImagesDir, "downloaded2.pdf");// Setup a cacheFileCache cache = new FileCache();cache.CacheDirectory = @"c:\cache-dir";string documentId;// Load a document into the cachevar loadDocumentOptions = new LoadDocumentOptions();loadDocumentOptions.Cache = cache;using (var document = DocumentFactory.LoadFromUri(documentUri, loadDocumentOptions)){// Get its document ID and save itdocumentId = document.DocumentId;document.AutoDeleteFromCache = false;document.AutoSaveToCache = false;document.SaveToCache();}// Now download it all at once into a memory streamvar downloadDocumentOptions = new DownloadDocumentOptions();downloadDocumentOptions.Cache = cache;downloadDocumentOptions.DocumentId = documentId;downloadDocumentOptions.Offset = 0;downloadDocumentOptions.Length = -1;using (var stream = new MemoryStream()){downloadDocumentOptions.Stream = stream;long bytes = DocumentFactory.DownloadDocument(downloadDocumentOptions);Console.WriteLine("Downloaded {0} bytes into the stream", bytes);long annotations = DocumentFactory.DownloadAnnotations(downloadDocumentOptions);Console.WriteLine(annotations + " annotations downloaded");// The following method is obsolete. Use DownloadAnnotations(DownloadDocumentOptions) insteadint annotations2 = DocumentFactory.DownloadAnnotations(downloadDocumentOptions.Cache, downloadDocumentOptions.DocumentId, downloadDocumentOptions.Offset, (int)bytes, stream);Console.WriteLine(annotations2 + " annotations downloaded");// Save the stream to a file and show itusing (var output = File.Create(documentFile1))stream.WriteTo(output);Process.Start(documentFile1);}// Download it again, this time we will buffer it 32K at a timedownloadDocumentOptions = new DownloadDocumentOptions();downloadDocumentOptions.Cache = cache;downloadDocumentOptions.DocumentId = documentId;byte[] buffer = new byte[1024 * 32];using (var output = File.Create(documentFile2)){// Offset to where we are:long offset = 0;int bytes;do{downloadDocumentOptions.Offset = offset;downloadDocumentOptions.Length = buffer.Length;downloadDocumentOptions.Data = buffer;downloadDocumentOptions.DataOffset = 0;bytes = (int)DocumentFactory.DownloadDocument(downloadDocumentOptions);if (bytes > 0){Console.WriteLine("Downloaded {0} bytes into the buffer", bytes);// Next chunkoffset += bytes;output.Write(buffer, 0, bytes);// The following method is obsolete. Use DownloadAnnotations(DownloadDocumentOptions) insteadint annotations = DocumentFactory.DownloadAnnotations(downloadDocumentOptions.Cache, downloadDocumentOptions.DocumentId, downloadDocumentOptions.Offset, buffer, downloadDocumentOptions.DataOffset, buffer.Length);Console.WriteLine(annotations + " annotations downloaded");}}while (bytes > 0);}Process.Start(documentFile2);// We are done, clean upvar deleteFromCacheOptions = new LoadFromCacheOptions();deleteFromCacheOptions.Cache = cache;deleteFromCacheOptions.DocumentId = documentId;DocumentFactory.DeleteFromCache(deleteFromCacheOptions);}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";}