How to convert PDF to JPEG from uploaded file (node for PDF to image API in JavaScript with PDF.co Web API

PDF.co Web API: the flexible Web API that includes full set of functions from e-signature requests to data extraction, OCR, images recognition, pdf splitting and pdf splitting. Can also generate barcodes and read barcodes from images, scans and pdf.

On-demand (REST Web API) version:
 Web API (on-demand version)

On-premise offline SDK for Windows:
 60 Day Free Trial (on-premise)

Converting PDF to Image is a very common yet not easily available feature we required many times. PDF.co provides an easy and straight-forward approach for converting PDF to different image formats such as JPG, PNG, TIFF, etc. In this sample, we’ll observe how to convert PDF to JPG with PDF.co. First of all let’s review the sample code and its output then we’ll go through important code snippets.

Source Code:

This sample using NodeJS, and also available on our GitHub Repository. This sample is also available in other programming languages, like C#, Java, Python, etc. Please explore our GitHub Repository for more information.

app.js

      
/*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"; // Comma-separated list of page indices (or ranges) to process. Leave empty for all pages. Example: '0,2-5,7-'. const Pages = ""; // PDF document password. Leave empty for unprotected documents. const Password = ""; // 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. CONVERT UPLOADED PDF FILE TO JPEG convertPdfToJpeg(API_KEY, uploadedFileUrl, Password, Pages); }) .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 convertPdfToJpeg(apiKey, uploadedFileUrl, password, pages) { // Prepare URL for `PDF To JPEG` API call var queryPath = `/v1/pdf/convert/to/jpg`; // JSON payload for api request var jsonPayload = JSON.stringify({ password: password, pages: pages, url: uploadedFileUrl }); var reqOptions = { host: "api.pdf.co", method: "POST", path: queryPath, headers: { "x-api-key": API_KEY, "Content-Type": "application/json", "Content-Length": Buffer.byteLength(jsonPayload, 'utf8') } }; // Send request var postRequest = https.request(reqOptions, (response) => { response.on("data", (d) => { response.setEncoding("utf8"); // Parse JSON response let data = JSON.parse(d); if (data.error == false) { // Download generated JPEG files var page = 1; data.urls.forEach((url) => { var localFileName = `./page${page}.jpg`; var file = fs.createWriteStream(localFileName); https.get(url, (response2) => { response2.pipe(file) .on("close", () => { console.log(`Generated JPEG file saved as "${localFileName}" file.`); }); }); page++; }, this); } else { // Service reported error console.log("convertPdfToJpeg(): " + data.message); } }); }) .on("error", (e) => { // Request error console.log("convertPdfToJpeg(): " + e); }); // Write request data postRequest.write(jsonPayload); postRequest.end(); }

package.json

      
{ "name": "test", "version": "1.0.0", "description": "PDF.co", "main": "app.js", "scripts": { }, "keywords": [ "pdf.co", "web", "api", "bytescout", "api" ], "author": "ByteScout & PDF.co", "license": "ISC", "dependencies": { "request": "^2.88.2" } }

Output:

Output of above sample is as following.

Now that we’ve observed code snippet and output, let’s analyze code briefly.

Initially we’re just importing node modules and declaring variables such as PDF.co API Key, source file, pages to be converted to image, etc.

After that, we’re performing uploading of the input PDF file by calling method getPresignedUrl. This method getPresignedUrl will get us two URLs, one will refer to the uploaded PDF file and the other URL is put request URL where a file should be uploaded. Once the response is received, we’re performing actual upload of file by invoking uploadFile method.

With all File Upload portion completed, the code is now proceeding with converting PDF to JPG. This is a straight forward approach like, we’re preparing the request URL, then preparing JSON payload for that request, invoking API and getting response.

Request URL in this case is /v1/pdf/convert/to/jpg, to get more information regarding this api endpoint please refer to documentation for PDF.co APIs. JSON payload is containing basic information such as input URL, pages to be converted, etc. Response is containing array of output URLs, we’re saving each of URL to physical file.

With this we’re done with converting PDF to Image. This is a very simple sample with a basic API call, we can explore documentation for advanced options available and configure as per our needs.

Please try to do small practical in your machine to get more idea. Thanks for reading!

VIDEO

ON-PREMISE OFFLINE SDK

Get 60 Day Free Trial

See also:

ON-DEMAND REST WEB API

Get Your API Key

See also:

Related Samples: