Options to use when downloading a document.
[SerializableAttribute()]
[DataContractAttribute()]
public class DownloadDocumentOptions
public:
[SerializableAttribute,
DataContractAttribute]
ref class DownloadDocumentOptions
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 cache
FileCache cache = new FileCache();
cache.CacheDirectory = @"c:\cache-dir";
string documentId;
// Load a document into the cache
var loadDocumentOptions = new LoadDocumentOptions();
loadDocumentOptions.Cache = cache;
using (var document = DocumentFactory.LoadFromUri(documentUri, loadDocumentOptions))
{
// Get its document ID and save it
documentId = document.DocumentId;
document.AutoDeleteFromCache = false;
document.AutoSaveToCache = false;
document.SaveToCache();
}
// Now download it all at once into a memory stream
var 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) instead
int 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 it
using (var output = File.Create(documentFile1))
stream.WriteTo(output);
Process.Start(documentFile1);
}
// Download it again, this time we will buffer it 32K at a time
downloadDocumentOptions = 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 chunk
offset += bytes;
output.Write(buffer, 0, bytes);
// The following method is obsolete. Use DownloadAnnotations(DownloadDocumentOptions) instead
int 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 up
var deleteFromCacheOptions = new LoadFromCacheOptions();
deleteFromCacheOptions.Cache = cache;
deleteFromCacheOptions.DocumentId = documentId;
DocumentFactory.DeleteFromCache(deleteFromCacheOptions);
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.regex.Pattern;
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.annotations.engine.*;
import leadtools.barcode.*;
import leadtools.caching.*;
import leadtools.codecs.*;
import leadtools.document.*;
import leadtools.document.DocumentMimeTypes.UserGetDocumentStatusHandler;
import leadtools.document.converter.*;
import leadtools.document.writer.*;
import leadtools.ocr.*;
public void downloadDocumentExample() throws IOException, URISyntaxException {
final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images";
URI documentUri = new URI("https://demo.leadtools.com/images/pdf/leadtools.pdf");
String documentFile1 = combine(LEAD_VARS_IMAGES_DIR, "downloaded1.pdf");
String documentFile2 = combine(LEAD_VARS_IMAGES_DIR, "downloaded2.pdf");
// Setup a cache
FileCache cache = new FileCache();
cache.setCacheDirectory("c:\\cache-dir");
String documentId;
// Load a document into the cache
LoadDocumentOptions loadDocumentOptions = new LoadDocumentOptions();
loadDocumentOptions.setCache(cache);
LEADDocument document = DocumentFactory.loadFromUri(documentUri, loadDocumentOptions);
// Get its document ID and save it
documentId = document.getDocumentId();
document.setAutoDeleteFromCache(false);
document.setAutoSaveToCache(false);
document.saveToCache();
// Now download it all at once into a memory stream
DownloadDocumentOptions downloadDocumentOptions = new DownloadDocumentOptions();
downloadDocumentOptions.setCache(cache);
downloadDocumentOptions.setDocumentId(documentId);
downloadDocumentOptions.setOffset(0);
downloadDocumentOptions.setLength(-1);
ILeadStream stream = LeadStreamFactory.create(documentFile1);
downloadDocumentOptions.setStream(stream);
long bytes = DocumentFactory.downloadDocument(downloadDocumentOptions);
System.out.printf("Downloaded %s bytes into the stream%n", bytes);
long annotations = DocumentFactory.downloadAnnotations(downloadDocumentOptions);
System.out.println(annotations + " annotations downloaded");
// The following method is obsolete. Use
// DownloadAnnotations(DownloadDocumentOptions) instead
int annotations2 = DocumentFactory.downloadAnnotations(downloadDocumentOptions.getCache(),
downloadDocumentOptions.getDocumentId(), downloadDocumentOptions.getOffset(), (int) bytes, stream);
System.out.println(annotations2 + " annotations downloaded");
// Save the stream to a file and show it
stream.dispose();
// Download it again, this time we will buffer it 32K at a time
downloadDocumentOptions = new DownloadDocumentOptions();
downloadDocumentOptions.setCache(cache);
downloadDocumentOptions.setDocumentId(documentId);
byte[] buffer = new byte[1024 * 32];
FileOutputStream output = new FileOutputStream(documentFile2);
// Offset to where we are:
long offset = 0;
bytes = 0;
do {
downloadDocumentOptions.setOffset(offset);
downloadDocumentOptions.setLength(buffer.length);
downloadDocumentOptions.setData(buffer);
downloadDocumentOptions.setDataOffset(0);
bytes = (int) DocumentFactory.downloadDocument(downloadDocumentOptions);
if (bytes > 0) {
System.out.printf("Downloaded %s bytes into the buffer%n", bytes);
// Next chunk
offset += bytes;
output.write(buffer, 0, (int) bytes);
// The following method is obsolete. Use
// DownloadAnnotations(DownloadDocumentOptions) instead
annotations = DocumentFactory.downloadAnnotations(downloadDocumentOptions.getCache(),
downloadDocumentOptions.getDocumentId(), downloadDocumentOptions.getOffset(), buffer,
downloadDocumentOptions.getDataOffset(), buffer.length);
System.out.println(annotations + " annotations downloaded");
}
} while (bytes > 0);
// We are done, clean up
LoadFromCacheOptions deleteFromCacheOptions = new LoadFromCacheOptions();
deleteFromCacheOptions.setCache(cache);
deleteFromCacheOptions.setDocumentId(documentId);
DocumentFactory.deleteFromCache(deleteFromCacheOptions);
assertTrue(new File(documentFile2).exists());
output.close();
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document