ID of this attachment document.
Object.defineProperty(DocumentAttachment.prototype, 'documentId',
get: function(),
set: function(value)
)
documentId: string;
ID of this attachment document. The default value is null.
isEmbedded is set to true when embedded attachments are read from a document and the value of documentId will be null.
Application programs adding external attachments should set the value of isEmbedded to false and set documentId to the ID of the document representing the attachment.
For more information, refer to Document Attachments.
For an example of using embedded attachments, refer to DocumentAttachment.
This example will add both a TIF and a PNG document as attachments to a LEADDocument.
import { DocumentHelper } from "../../utilities/DocumentHelper";
export class DocumentAttachment_DocumentIdExample {
private el: HTMLElement;
public constructor() {
lt.RasterSupport.setLicenseUri("https://demo.leadtools.com/licenses/v200/LEADTOOLSEVAL.txt", "EVAL", null);
DocumentHelper.initFactory();
}
public run(buttonID: string) {
document.getElementById(buttonID).onclick = this.onRun;
}
onRun = () => {
// Main document
const mainDocumentUrl = "https://demo.leadtools.com/images/pdf/leadtools.pdf";
// Attachments
const attachmentsUrls = [
"https://demo.leadtools.com/images/png/ocr1.png",
"https://demo.leadtools.com/images/tiff/ocr.tif",
];
// Load the main document
this.loadDocument(mainDocumentUrl, (mainDocument) => {
this.showDocumentWithAttachments("Initial", mainDocument, 0, () => {
// Load all the attachments
mainDocument.isReadOnly = false;
this.loadAndAddAttachment(mainDocument, attachmentsUrls, 0, () => {
mainDocument.isReadOnly = true;
// Now, show the document info again, it should have 3 attachments
this.showDocumentWithAttachments("After adding attachments", mainDocument, attachmentsUrls.length, () => {
// Clean up
lt.Document.DocumentFactory.deleteFromCache(mainDocument.documentId)
.done(() => {
console.log("Example done");
})
.fail(DocumentHelper.showServiceError);
});
});
});
});
}
loadDocument = (url: string, done: (doc: lt.Document.LEADDocument) => void) => {
DocumentHelper.log("Loading document " + url);
lt.Document.DocumentFactory.loadFromUri(url, new lt.Document.LoadDocumentOptions())
.done((doc) => {
DocumentHelper.log("Document loaded and has cache id: " + doc.documentId);
done(doc);
})
.fail(DocumentHelper.showServiceError);
}
showDocumentWithAttachments = (message: string, doc: lt.Document.LEADDocument, attachmentCount: number, done: () => void) => {
// Show info about this document and any attachments
console.log(message);
console.log(" " + this.getDocumentInfo(doc));
// Sanity check
if (attachmentCount !== doc.attachments.count) throw new Error("Something went wrong");
if (doc.attachments.count > 0) {
console.log(" attachments:");
// Load the attachment documents
this.loadAttachmentDocumentsFromCache(doc, 0, done);
} else {
done();
}
}
loadAndAddAttachment = (mainDocument: lt.Document.LEADDocument, attachmentUrls: string[], attachmentIndex: number, done: () => void) => {
if (attachmentIndex >= attachmentUrls.length) {
done();
return;
}
console.log("Loading attachment document " + attachmentUrls[attachmentIndex]);
this.loadDocument(attachmentUrls[attachmentIndex], (attachmentDocument) => {
// Add it to the main document as an attachment
const attachment = new lt.Document.DocumentAttachment();
// The attachment number.
attachment.attachmentNumber = attachmentIndex + 1;
// This is an external attachment
attachment.isEmbedded = false;
// And the document ID
attachment.documentId = attachmentDocument.documentId;
// The rest of the properties are optional but setting them might be helpful to an application user interface
attachment.fileName = attachmentDocument.name;
attachment.displayName = attachmentDocument.name;
attachment.mimeType = attachmentDocument.mimeType;
mainDocument.attachments.add(attachment);
// Load next
this.loadAndAddAttachment(mainDocument, attachmentUrls, attachmentIndex + 1, done);
});
}
loadAttachmentDocumentsFromCache = (mainDocument: lt.Document.LEADDocument, attachmentIndex: number, done: () => void) => {
if (attachmentIndex >= mainDocument.attachments.count) {
done();
return;
}
// Get the attachment document ID
const documentAttachment = mainDocument.attachments.item(attachmentIndex);
lt.Document.DocumentFactory.loadFromCache(documentAttachment.documentId)
.done((doc) => {
console.log(" " + this.getDocumentInfo(doc));
this.loadAttachmentDocumentsFromCache(mainDocument, attachmentIndex + 1, done);
})
.fail(DocumentHelper.showServiceError);
}
private getDocumentInfo(doc: lt.Document.LEADDocument) {
let msg = "documentId:" + doc.documentId;
msg += " mimeType:" + doc.mimeType;
msg += " pages:" + doc.pages.count;
msg += " attachments:" + doc.attachments.count;
return msg;
}
}
export class DocumentHelper {
static showServiceError = (jqXHR, statusText, errorThrown) => {
alert("Error returned from service. See the console for details.");
const serviceError = lt.Document.ServiceError.parseError(jqXHR, statusText, errorThrown);
console.error(serviceError);
}
static log = (message: string, data?: any) => {
const outputElement = document.getElementById("output");
if (outputElement) {
const time = (new Date()).toLocaleTimeString();
const textElement = document.createElement("p");
textElement.innerHTML = (outputElement.childElementCount + 1) + " [" + time + "]: " + message;
outputElement.insertBefore(textElement, outputElement.firstChild);
}
if (!data)
console.log(message);
else
console.log(message, data);
}
static initFactory = () => {
// To communicate with the DocumentsService, it must be running!
// Change these parameters to match the path to the service.
lt.Document.DocumentFactory.serviceHost = "http://localhost:40000";
lt.Document.DocumentFactory.servicePath = "";
lt.Document.DocumentFactory.serviceApiPath = "api";
}
}
import { DocumentHelper } from "../../utilities/DocumentHelper";
export class DocumentAttachment_DocumentIdExample {
constructor() {
lt.RasterSupport.setLicenseUri("https://demo.leadtools.com/licenses/v200/LEADTOOLSEVAL.txt", "EVAL", null);
DocumentHelper.initFactory();
}
run = (buttonID) => {
document.getElementById(buttonID).onclick = this.onRun;
}
onRun = () => {
// Main document
const mainDocumentUrl = "https://demo.leadtools.com/images/pdf/leadtools.pdf";
// Attachments
const attachmentsUrls = [
"https://demo.leadtools.com/images/png/ocr1.png",
"https://demo.leadtools.com/images/tiff/ocr.tif",
];
// Load the main document
this.loadDocument(mainDocumentUrl, (mainDocument) => {
this.showDocumentWithAttachments("Initial", mainDocument, 0, () => {
// Load all the attachments
mainDocument.isReadOnly = false;
this.loadAndAddAttachment(mainDocument, attachmentsUrls, 0, () => {
mainDocument.isReadOnly = true;
// Now, show the document info again, it should have 3 attachments
this.showDocumentWithAttachments("After adding attachments", mainDocument, attachmentsUrls.length, () => {
// Clean up
lt.Document.DocumentFactory.deleteFromCache(mainDocument.documentId)
.done(() => {
console.log("Example done");
})
.fail(DocumentHelper.showServiceError);
});
});
});
});
}
loadDocument = (url, done) => {
DocumentHelper.log("Loading document " + url);
lt.Document.DocumentFactory.loadFromUri(url, new lt.Document.LoadDocumentOptions())
.done((doc) => {
DocumentHelper.log("Document loaded and has cache id: " + doc.documentId);
done(doc);
})
.fail(DocumentHelper.showServiceError);
}
showDocumentWithAttachments = (message, doc, attachmentCount, done) => {
// Show info about this document and any attachments
console.log(message);
console.log(" " + this.getDocumentInfo(doc));
// Sanity check
if (attachmentCount !== doc.attachments.count) throw new Error("Something went wrong");
if (doc.attachments.count > 0) {
console.log(" attachments:");
// Load the attachment documents
this.loadAttachmentDocumentsFromCache(doc, 0, done);
} else {
done();
}
}
loadAndAddAttachment = (mainDocument, attachmentUrls, attachmentIndex, done) => {
if (attachmentIndex >= attachmentUrls.length) {
done();
return;
}
console.log("Loading attachment document " + attachmentUrls[attachmentIndex]);
this.loadDocument(attachmentUrls[attachmentIndex], (attachmentDocument) => {
// Add it to the main document as an attachment
const attachment = new lt.Document.DocumentAttachment();
// The attachment number.
attachment.attachmentNumber = attachmentIndex + 1;
// This is an external attachment
attachment.isEmbedded = false;
// And the document ID
attachment.documentId = attachmentDocument.documentId;
// The rest of the properties are optional but setting them might be helpful to an application user interface
attachment.fileName = attachmentDocument.name;
attachment.displayName = attachmentDocument.name;
attachment.mimeType = attachmentDocument.mimeType;
mainDocument.attachments.add(attachment);
// Load next
this.loadAndAddAttachment(mainDocument, attachmentUrls, attachmentIndex + 1, done);
});
}
loadAttachmentDocumentsFromCache = (mainDocument, attachmentIndex, done) => {
if (attachmentIndex >= mainDocument.attachments.count) {
done();
return;
}
// Get the attachment document ID
const documentAttachment = mainDocument.attachments.item(attachmentIndex);
lt.Document.DocumentFactory.loadFromCache(documentAttachment.documentId)
.done((doc) => {
console.log(" " + this.getDocumentInfo(doc));
this.loadAttachmentDocumentsFromCache(mainDocument, attachmentIndex + 1, done);
})
.fail(DocumentHelper.showServiceError);
}
getDocumentInfo(doc) {
let msg = "documentId:" + doc.documentId;
msg += " mimeType:" + doc.mimeType;
msg += " pages:" + doc.pages.count;
msg += " attachments:" + doc.attachments.count;
return msg;
}
}
export class DocumentHelper {
static showServiceError = (jqXHR, statusText, errorThrown) => {
alert("Error returned from service. See the console for details.");
const serviceError = lt.Document.ServiceError.parseError(jqXHR, statusText, errorThrown);
console.error(serviceError);
}
static log = (message, data) => {
const outputElement = document.getElementById("output");
if (outputElement) {
const time = (new Date()).toLocaleTimeString();
const textElement = document.createElement("p");
textElement.innerHTML = (outputElement.childElementCount + 1) + " [" + time + "]: " + message;
outputElement.insertBefore(textElement, outputElement.firstChild);
}
if (!data)
console.log(message);
else
console.log(message, data);
}
static initFactory = () => {
// To communicate with the DocumentsService, it must be running!
// Change these parameters to match the path to the service.
lt.Document.DocumentFactory.serviceHost = "http://localhost:40000";
lt.Document.DocumentFactory.servicePath = "";
lt.Document.DocumentFactory.serviceApiPath = "api";
}
}
<!doctype html>
<html lang="en">
<title>Document Example | DocumentAttachment.DocumentID</title>
<head>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script src="../../LT/Leadtools.js"></script>
<script src="../../LT/Leadtools.Controls.js"></script>
<script src="../../LT/Leadtools.Annotations.Engine.js"></script>
<script src="../../LT/Leadtools.Annotations.Designers.js"></script>
<script src="../../LT/Leadtools.Annotations.Rendering.Javascript.js"></script>
<script src="../../LT/Leadtools.Annotations.Automation.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Main.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Color.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Core.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Effects.js"></script>
<script src="../../LT/Leadtools.Document.js"></script>
<script src="../../LT/Leadtools.Document.Viewer.js"></script>
<link rel="stylesheet" type="text/css" href="../../css/examples.css">
<!-- All demo files are bundled and appended to the window -->
<script src="../../bundle.js" type="text/javascript"></script>
</head>
<body>
<div>
<button type="button" id="exampleButton">Run Example</button>
</div>
<div id="output"></div>
<div>
<img id="img" />
</div>
</body>
<script>
window.onload = () => {
const example = new window.examples.DocumentAttachment.DocumentId();
example.run("exampleButton");
};
</script>
</html>
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