Options to use when loading an attachment.
[SerializableAttribute()]
[DataContractAttribute()]
public class LoadAttachmentOptions
LoadAttachmentOptions is used as a parameter for DocumentFactory.LoadDocumentAttachment and LEADDocument.LoadDocumentAttachment, to identify which attachment to load.
For more information, refer to Document Attachments.
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 AttachmentsExample()
{
// The PDF document can be one of the following:
// 1. Normal PDF without attachments. Has one or more pages and no attachments.
// 2. Normal PDF with attachments. Has one or more pages and one or more attachments.
// 3. PDF Portfolio. Has a placeholder page and one or more attachments.
// The value of LoadDocumentOptions.LoadAttachmentsMode affects loading the documents as follows:
// 1. Normal PDF without attachments: Will not be affected.
// 2. Normal PDF with attachments: Number of pages is not affected.
// Number of attachments is:
// LoadAttachmentsMode = None then 0
// LoadAttachmentsMode = AsAttachments then number of attachments found in the document.
// 3. PDF Portfolio: Number of pages is:
// LoadAttachmentsMode = None then 1 (the placeholder page)
// LoadAttachmentsMode = AsAttachments then 0 (the document has no pages).
// Number of attachments is:
// LoadAttachmentsMode = None then 0
// LoadAttachmentsMode = AsAttachments then number of attachments found in the document.
// First, load the document without attachments
string pdfFile = Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.pdf");
string outputDirectory = Path.GetDirectoryName(LEAD_VARS.ImagesDir);
Console.WriteLine($"Loading with DocumentLoadAttachmentsMode.None");
var loadDocumentOptions = new LoadDocumentOptions();
loadDocumentOptions.LoadAttachmentsMode = DocumentLoadAttachmentsMode.None;
using (LEADDocument document = DocumentFactory.LoadFromFile(pdfFile, loadDocumentOptions))
{
Console.WriteLine(document.GetDocumentFileName());
Console.WriteLine($"Document has {document.Pages.Count} pages");
// Find out if the document is portfolio
bool isPortfolio =
document.Metadata.ContainsKey(LEADDocument.MetadataKey_IsPortfolio) &&
bool.Parse(document.Metadata[LEADDocument.MetadataKey_IsPortfolio]);
Console.WriteLine($"IsPortfolio:{isPortfolio}");
// Check that everything is as expected
// We should have 0 attachments since we did not instruct the toolkit to load these
Debug.Assert(document.Attachments.Count == 0);
// We should have one or more pages regardless of whether the document is PDF portfolio
Debug.Assert(document.Pages.Count > 0);
}
// Next, load the document with attachments
Console.WriteLine($"Loading with DocumentLoadAttachmentsMode.AsAttachments");
loadDocumentOptions.LoadAttachmentsMode = DocumentLoadAttachmentsMode.AsAttachments;
using (LEADDocument document = DocumentFactory.LoadFromFile(pdfFile, loadDocumentOptions))
{
document.AutoDeleteAttachmentsFromCache = true;
Console.WriteLine($"Document has {document.Pages.Count} pages");
// Find out if the document is portfolio
bool isPortfolio =
document.Metadata.ContainsKey(LEADDocument.MetadataKey_IsPortfolio) &&
bool.Parse(document.Metadata[LEADDocument.MetadataKey_IsPortfolio]);
Console.WriteLine($"IsPortfolio:{isPortfolio}");
// Check that everything is as expected
// We may have 0 or more attachments depending on the file
Console.WriteLine($"Document has {document.Attachments.Count} attachments");
// We should have one or more pages unless this is PDF portfolio, then it will have 0 pages
if (isPortfolio)
{
Debug.Assert(document.Pages.Count == 0);
}
// Extract all the attachments into the output directory
foreach (DocumentAttachment attachment in document.Attachments)
{
// Show info on this attachment
Console.WriteLine($"Attachment number {attachment.AttachmentNumber} file name is '{attachment.FileName}', " +
$"length is {attachment.FileLength} bytes, and ID is {attachment.DocumentId}, Is Embedded: {attachment.IsEmbedded}");
// Get the attachment file name
// This value may not be unique, so combine it with the attachment number
string attachmentFileName = $"{attachment.AttachmentNumber}-{attachment.FileName}";
attachmentFileName = Path.Combine(outputDirectory, attachmentFileName);
// Get the attachment as a stream, we do not want to save it to the cache so pass null for that
// DocumentAttachments reference
using (Stream attachmentStream = document.Attachments.CreateAttachmentStream(attachment.AttachmentNumber, null))
{
if (attachmentStream != null)
{
// Save it to the output file
using (var stream = File.Create(attachmentFileName))
{
document.SaveAttachmentToCache(null);
attachmentStream.CopyTo(stream);
}
}
}
var saveOptions = new SaveAttachmentToCacheOptions();
saveOptions.AttachmentNumber = 0;
saveOptions.UpdateAttachmentDocumentId = true;
saveOptions.UploadDocumentOptions = new UploadDocumentOptions();
document.SaveAttachmentToCache(saveOptions);
// Or load this attachment as a LEADDocument, this might fail if the attachment is not of a valid image
// or document format
try
{
Console.WriteLine("Loading as LEADDocument");
var loadAttachmentOptions = new LoadAttachmentOptions();
loadAttachmentOptions.AttachmentNumber = attachment.AttachmentNumber;
loadAttachmentOptions.UpdateAttachmentDocumentId = true;
using (LEADDocument attachmentDocument = document.LoadDocumentAttachment(loadAttachmentOptions))
{
Console.WriteLine($"Success, attachment document mime type is {attachmentDocument.MimeType} and has {attachmentDocument.Pages.Count} pages");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error {ex.Message}");
}
}
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
}