Below is an end-to-end example of submitting a Convert request using Node.js programming language:
// Simple script to make and process the results of a Conversion request to the LEADTOOLS CloudServices.
// In order to run this script, the following changes will need to be added:
// 1) Place your Application ID in the user portion of the getRequestOptions method.
// 2) Place your Application Password in the password portion of the getRequestOptions method.
//
// The script will perform the following operations in order:
// 1)Perform a Conversion request to the LEADTOOLS CloudServices. A successfully made request will return a unique identifier.
// 2)We will then query the services using the GUID -- if the file is finished processing, the body will contain all the
// request data.
// 3)We will take the json data that was returned, parse it, and display all the information that was returned.
//
// This script makes use of the following NodeJS libraries:
// 1) Request - More information about this library can be found here: https://github.com/request/request
// 2) File System - More information about this library can be found here: https://nodejs.org/api/fs.html
const request = require('request');
//If uploading a file as multi-part content, we will need the file-system library installed.
//const fs = require('fs');
var FormatsEnum = {
"png": 1, "jpeg": 2, "tiff": 3, "pdf": 4, "pdfa": 5,
"pdfImage": 6, "pdfImageOverText": 7, "pdfaImageOverText": 8,
"docx": 9, "docxFramed": 10, "rtf": 11, "rtfFramed": 12,
"txt": 13, "txtFramed": 14
};
var servicesUrl = "https://azure.leadtools.com/api/";
//The first page in the file to mark for processing
var firstPage = 1;
//Sending a value of -1 will indicate to the services that the rest of the pages in the file should be processed.
var lastPage = -1;
//Enum corresponding to the output format for the file. For the purposes of this script, we will be converting to tif.
var fileFormat = FormatsEnum.tiff;
//We will be uploading the file via a URl. Files can also be passed by adding a PostFile to the request. Only 1 file will be accepted per request.
//The services will use the following priority when determining what a request is trying to do GUID > URL > Request Body Content
var fileURL = 'https://demo.leadtools.com/images/pdf/leadtools.pdf';
var conversionUrl = servicesUrl + 'Conversion/Convert?firstPage=' + firstPage + '&lastPage=' + lastPage + '&fileurl=' + fileURL + '&format=' + fileFormat;
request.post(getRequestOptions(conversionUrl), conversionCallback);
//If uploading a file as multi-part content:
//var conversionUrl = servicesUrl + 'Conversion/Convert?firstPage=' + firstPage + '&lastPage=' + lastPage + '&format=' + fileFormat;
//var req = request.post(getRequestOptions(conversionUrl), conversionCallback);
//var form = req.form();
//form.append('file', fs.createReadStream('path\to\inputFile'));
function conversionCallback(error, response, body) {
if (!error && response.statusCode === 200) {
var guid = body;
console.log("Unique ID returned by the Services: " + guid);
queryServices(guid);
}
}
function queryServices(guid) {
//Function to query the status of a request. If the request has not yet finished, this function will recursively call itself until the file has finished.
var queryUrl = servicesUrl + "Query?id=" + guid;
request.post(getRequestOptions(queryUrl), async function (error, response, body) {
var results = JSON.parse(body);
if (!error && (results['FileStatus'] !== 100 && results['FileStatus'] !== 123)) {
console.log("File finished processing with return code: " + response.statusCode);
if (results['FileStatus'] !== 200) {
return;
}
console.log("Results: \n");
parseJson(results['RequestData']);
} else {
//The file has not yet finished processing.
await function () {
return new Promise(resolve => setTimeout(resolve, 5000)); //Sleep for 5 seconds before trying again
};
queryServices(guid); //Call the method again.
}
});
}
function parseJson(jsonObject) {
//Function to decode the JSON object that was returned by the LEADTOOLS CloudServices.
for (let i = 0; i < jsonObject.length; i++) {
var currentRequest = jsonObject[i];
console.log("Service Type: " + currentRequest['ServiceType']);
if (currentRequest['ServiceType'] === 'Conversion') {
console.log("Urls: ");
currentRequest['urls'].forEach(url => {
console.log(url);
});
}
}
}
function getRequestOptions(url) {
//Function to generate and return HTTP request options.
var requestOptions = {
url: url,
//If uploading a file as multi-part content, remove the Content-Length header.
headers: {
'Content-Length': 0
},
auth: {
user: "Replace with Application ID",
password: "Replace with Application Password"
}
};
return requestOptions;
}