StatusJobDataRunner Object

Summary

Runs a conversion job with status update.

Syntax
TypeScript
JavaScript
function lt.Document.Converter.StatusJobDataRunner 
class lt.Document.Converter.StatusJobDataRunner() 

Remarks

StatusJobData is used with StatusJobDataRunner to:

  • Convert a document in the cache and upload it automatically.
  • Perform the operation in a separate process (if the cache allows multiple processes to access the same value).
  • Use the cache to save and obtain the status of the conversion.

StatusJobData can be initialized using only simple string parameters. Therefore, the application can run the job from one process and perform the status query described above in the thread in a completely separate process.

Refer to Status Document Job Converter

Example

This example will convert a TIFF document to PDF.

Start with the example from LEADDocument and replace all the code inside the example function (search for the "// TODO: add example code here" comment) with the following code:

TypeScript
JavaScript
// We will be converting this TIFF file to PDF 
var imageUrl = "https://demo.leadtools.com/images/tiff/ocr.tif"; 
log("Loading document..."); 
var loadDocumentOptions = new lt.Document.LoadDocumentOptions(); 
// Load the source document and save it to the cache 
lt.Document.DocumentFactory.loadFromUri(imageUrl, loadDocumentOptions) 
   .done(function (doc) { 
      log("Saving document to cache..."); 
      lt.Document.DocumentFactory.saveToCache(doc) 
         .done(function () { 
            var userToken = null; 
            var jobToken = null; 
            var minWaitFromResponse = 2000; 
            var minWaitFromRequest = 3000; 
            var requestTime = -1; 
            var responseTime = -1; 
            var runQuery = null; 
 
            // Document is the cache, create the job data and set its options 
            var jobData = new lt.Document.DocumentConverterJobData(); 
            jobData.documentFormat = lt.Document.Writer.DocumentFormat.pdf; 
            // Convert 
            var convertJobPromise = lt.Document.Converter.StatusJobDataRunner.runConvertJob(doc.documentId, jobData) 
               .done(function (convertJobResult) { 
                  // convertJobResult is of type lt.Document.Converter.StatusJobDataRunner.RunConvertJobResult 
                  // Get the user and job token 
                  userToken = convertJobResult.userToken; 
                  jobToken = convertJobResult.jobToken; 
 
                  // Create the function to call when the job is done 
                  var queryDone = function (statusJobData) { 
                     // statusJobData is of type lt.Document.Converter.StatusJobData 
                     // Check for errors 
                     if (statusJobData.errorMessages && statusJobData.errorMessages.length) { 
                        var messages = [ 
                           "The conversion job encountered an error:", 
                           statusJobData.errorMessages[0], 
                           "Check the console for more information." 
                        ]; 
                        alert(messages.join("\n")); 
                        return; 
                     } 
                     else if (statusJobData.isCompleted) { 
                        // Completed successfully 
                        // Delete the job 
                        lt.Document.Converter.StatusJobDataRunner.deleteConvertJob(userToken, jobToken) 
                           .always(function () { 
                              // Success, load the document 
                              log("Finished loading result document..."); 
                              lt.Document.DocumentFactory.loadFromUri(statusJobData.outputDocumentUri, loadDocumentOptions) 
                                 .done(function (resultDoc) { 
                                    var resultDocument = resultDoc.cacheUri; 
                                    var link = document.createElement("a"); 
                                    var url = resultDocument; 
                                    link.href = url; 
                                    link.innerHTML = url; 
                                    link.target = "_default"; 
                                    log("Converted: " + url, url); 
                                    output.insertBefore(link, output.firstChild); 
                                 }) 
                                 .fail(showServiceError); 
                           }); 
                        return; 
                     } 
 
                     log("Converting " + statusJobData.jobStatusMessage + "..."); 
 
                     // Keep querying 
                     runQuery(Date.now()); 
                  }; 
 
                  runQuery = function (responseTime) { 
                     var now = Date.now(); 
 
                     if (requestTime !== -1) { 
                        var timeSinceRequest = now - requestTime; 
                        var timeSinceResponse = now - responseTime; 
 
                        // If we haven't waited the minimum since the response and haven't waited the maximum since the request, wait 
                        if (timeSinceResponse < minWaitFromResponse || timeSinceRequest < minWaitFromRequest) { 
                           var waitTime = Math.max(minWaitFromResponse - timeSinceResponse, minWaitFromRequest - timeSinceRequest); 
                           window.setTimeout(function () { 
                              runQuery(responseTime); 
                           }, waitTime); 
                           return; 
                        } 
                     } 
 
                     lt.Document.Converter.StatusJobDataRunner.queryConvertJobStatus(userToken, jobToken) 
                        .done(queryDone) 
                        .fail(showServiceError); 
                     requestTime = Date.now(); 
                     return; 
                  } 
 
                  runQuery(Date.now()); 
               }) 
               .fail(showServiceError); 
         }) 
         .fail(showServiceError); 
   }) 
   .fail(showServiceError); 
class StatusJobDataRunner_Example { 
    public constructor() { 
        lt.RasterSupport.setLicenseUri("https://demo.leadtools.com/licenses/v200/LEADTOOLSEVAL.txt", "EVAL", null); 
    } 
 
    public run(buttonID: string) { 
        document.getElementById(buttonID).onclick = this.convert; 
    } 
 
    convert = () => { 
        // We will be converting this TIFF file to PDF 
        const imageUrl = "https://demo.leadtools.com/images/tiff/ocr.tif"; 
        const loadDocumentOptions = new lt.Document.LoadDocumentOptions(); 
 
        log("Loading document..."); 
        // Load the source document and save it to the cache 
        lt.Document.DocumentFactory.loadFromUri(imageUrl, loadDocumentOptions) 
        .done((doc) => { 
            log("Saving document to cache..."); 
            lt.Document.DocumentFactory.saveToCache(doc) 
                .done(() => { 
                    let userToken = null; 
                    let jobToken = null; 
                    let minWaitFromResponse = 2000; 
                    let minWaitFromRequest = 3000; 
                    let requestTime = -1; 
                    let responseTime = -1; 
                    let runQuery = null; 
 
                    // Document is the cache, create the job data and set its options 
                    const jobData = new lt.Document.DocumentConverterJobData(); 
                    jobData.documentFormat = lt.Document.Writer.DocumentFormat.pdf; 
                    // Convert 
                    const convertJobPromise = lt.Document.Converter.StatusJobDataRunner.runConvertJob(doc.documentId, jobData) 
                    .done((convertJobResult) => { 
                        // convertJobResult is of type lt.Document.Converter.StatusJobDataRunner.RunConvertJobResult 
                        // Get the user and job token 
                        userToken = convertJobResult.userToken; 
                        jobToken = convertJobResult.jobToken; 
 
                        // Create the function to call when the job is done 
                        const queryDone = (statusJobData) => { 
                            // statusJobData is of type lt.Document.Converter.StatusJobData 
                            // Check for errors 
                            if (statusJobData.errorMessages && statusJobData.errorMessages.length) { 
                                const messages = [ 
                                "The conversion job encountered an error:", 
                                statusJobData.errorMessages[0], 
                                "Check the console for more information." 
                                ]; 
                                alert(messages.join("\n")); 
                                return; 
                            } 
                            else if (statusJobData.isCompleted) { 
                                // Completed successfully 
                                // Delete the job 
                                lt.Document.Converter.StatusJobDataRunner.deleteConvertJob(userToken, jobToken) 
                                .always(() => { 
                                    // Success, load the document 
                                    log("Finished loading result document..."); 
                                    lt.Document.DocumentFactory.loadFromUri(statusJobData.outputDocumentUri, loadDocumentOptions) 
                                        .done((resultDoc) => { 
                                            const resultDocument = resultDoc.cacheUri; 
                                            const link = document.createElement("a"); 
                                            const url = resultDocument; 
                                            link.href = url; 
                                            link.innerHTML = url; 
                                            link.target = "_default"; 
                                            log("Converted: " + url, url); 
                                        }) 
                                        .fail(showServiceError); 
                                }); 
                                return; 
                            } 
 
                            log("Converting " + statusJobData.jobStatusMessage + "..."); 
 
                            // Keep querying 
                            runQuery(Date.now()); 
                        }; 
 
                        runQuery = (responseTime) => { 
                            const now = Date.now(); 
 
                            if (requestTime !== -1) { 
                                const timeSinceRequest = now - requestTime; 
                                const timeSinceResponse = now - responseTime; 
 
                                // If we haven't waited the minimum since the response and haven't waited the maximum since the request, wait 
                                if (timeSinceResponse < minWaitFromResponse || timeSinceRequest < minWaitFromRequest) { 
                                    const waitTime = Math.max(minWaitFromResponse - timeSinceResponse, minWaitFromRequest - timeSinceRequest); 
                                    window.setTimeout(() => { 
                                        runQuery(responseTime); 
                                    }, waitTime); 
                                    return; 
                                } 
                            } 
 
                            lt.Document.Converter.StatusJobDataRunner.queryConvertJobStatus(userToken, jobToken) 
                                .done(queryDone) 
                                .fail(showServiceError); 
                            requestTime = Date.now(); 
                            return; 
                        } 
 
                        runQuery(Date.now()); 
                    }) 
                    .fail(showServiceError); 
                }) 
                .fail(showServiceError); 
        }) 
        .fail(showServiceError); 
    } 
} 

Requirements

Target Platforms

Help Version 20.0.2019.4.11
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2019 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Document Assembly