OptimizePdfFromUploadedFile.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | /*jshint esversion: 6 */ var https = require( "https" ); var path = require( "path" ); var fs = require( "fs" ); // `request` module is required for file upload. // Use "npm install request" command to install. var request = require( "request" ); // The authentication key (API Key). // Get your own by registering at https://app.pdf.co/documentation/api const API_KEY = "***********************************" ; // Source PDF file const SourceFile = "./sample.pdf" ; // PDF document password. Leave empty for unprotected documents. const Password = "" ; // Destination PDF file name const DestinationFile = "./result.pdf" ; // 1. RETRIEVE PRESIGNED URL TO UPLOAD FILE. getPresignedUrl(API_KEY, SourceFile) .then(([uploadUrl, uploadedFileUrl]) => { // 2. UPLOAD THE FILE TO CLOUD. uploadFile(API_KEY, SourceFile, uploadUrl) .then(() => { // 3. OPTIMIZE UPLOADED PDF FILE optimizePdf(API_KEY, uploadedFileUrl, Password, DestinationFile); }) . catch (e => { console.log(e); }); }) . catch (e => { console.log(e); }); function getPresignedUrl(apiKey, localFile) { return new Promise(resolve => { // Prepare request to `Get Presigned URL` API endpoint let queryPath = `/v1/file/upload/get-presigned-url?contenttype=application/octet-stream&name=${path.basename(SourceFile)}`; let reqOptions = { host: "api.pdf.co" , path: encodeURI(queryPath), headers: { "x-api-key" : API_KEY } }; // Send request https.get(reqOptions, (response) => { response.on( "data" , (d) => { let data = JSON.parse(d); if (data.error == false ) { // Return presigned url we received resolve([data.presignedUrl, data.url]); } else { // Service reported error console.log( "getPresignedUrl(): " + data.message); } }); }) .on( "error" , (e) => { // Request error console.log( "getPresignedUrl(): " + e); }); }); } function uploadFile(apiKey, localFile, uploadUrl) { return new Promise(resolve => { fs.readFile(SourceFile, (err, data) => { request({ method: "PUT" , url: uploadUrl, body: data, headers: { "Content-Type" : "application/octet-stream" } }, (err, res, body) => { if (!err) { resolve(); } else { console.log( "uploadFile() request error: " + e); } }); }); }); } function optimizePdf(apiKey, uploadedFileUrl, password, destinationFile) { // Prepare request to `Optimize PDF` API endpoint var queryPath = `/v1/pdf/optimize?name=${path.basename(destinationFile)}&password=${password}&url=${uploadedFileUrl}& async =True`; let reqOptions = { host: "api.pdf.co" , path: encodeURI(queryPath), method: "GET" , headers: { "x-api-key" : API_KEY } }; // Send request https.get(reqOptions, (response) => { response.on( "data" , (d) => { response.setEncoding( "utf8" ); // Parse JSON response let data = JSON.parse(d); if (data.error == false ) { checkIfJobIsCompleted(data.jobId, data.url, destinationFile); } else { // Service reported error console.log( "readBarcodes(): " + data.message); } }); }) .on( "error" , (e) => { // Request error console.log( "readBarcodes(): " + e); }); } function checkIfJobIsCompleted(jobId, resultFileUrl, destinationFile) { let queryPath = `/v1/job/check?jobid=${jobId}`; let reqOptions = { host: "api.pdf.co" , path: encodeURI(queryPath), method: "GET" , headers: { "x-api-key" : API_KEY } }; https.get(reqOptions, (response) => { response.on( "data" , (d) => { response.setEncoding( "utf8" ); // Parse JSON response let data = JSON.parse(d); if (data.Status == "InProgress" ) { // Check again after 2 seconds setTimeout( function (){ checkIfJobIsCompleted(jobId, resultFileUrl, destinationFile);}, 2000); } else if (data.Status == "Finished" ) { // Download PDF file var file = fs.createWriteStream(destinationFile); https.get(resultFileUrl, (response2) => { response2.pipe(file) .on( "close" , () => { console.log(`Generated PDF file saved as "${destinationFile}" file.`); }); }); } else { console.log(`Operation ended with status: "${data.Status}" .`); } }) }); } |
Click here to get your Free Trial version of the SDK
IMPORTANT:
Cloud API is deprecated and was replaced with more powerful and secure www.PDF.co Web API
CLICK HERE
TO LEARN MORE
ABOUT NEW
www.PDF.co
w/ Web API
On-Premise API Server
Cloud API Server