Google Apps Script is a scripting platform designed for rapid application development for the fast and easy creation of business applications that integrate with G Suite products. Modern JavaScript is the scripting language being used to write codes. Apps Script includes built-in libraries for G Suite applications such as Drive, Calendar, Gmail, and more.
We can break PDF.co API integration into three steps.
Prepare Payload
Prepare Request Options.
Invoke Request and consume the response
It’s worth observing the second step where we’re preparing options for request. Here, Request Options contain API Key in the header as well payload attribute containing JSON string.
The full source code is as below.
/** * IMPORTANT: Add Service reference for "Drive". Go to Services > Locate "Drive (drive API)" > Add Reference of it */// Add Your PDF.co API Key hereconst pdfCoAPIKey = 'PDFco_API_Key_Here';// Get the active spreadsheet and the active sheetss = SpreadsheetApp.getActiveSpreadsheet();ssid = ss.getId();// Look in the same folder the sheet exists in. For example, if this template is in// My Drive, it will return all of the files in My Drive.var ssparents = DriveApp.getFileById(ssid).getParents();// Store File-Ids/PermissionIds used for merginglet filePermissions = [];/** * Note: Here, we're getting current folder where spreadsheet is residing. * But we can certainly pick any folder of our like by using Folder related functions. * For example: var allFolders = DriveApp.getFoldersByName("Folder_Containing_PDF_Files"); while (allFolders.hasNext()) { var folder = allFolders.next(); Logger.log(folder.getName()); } */// Loop through all the files and add the values to the spreadsheet.var folder = ssparents.next();/** * Add PDF.co Menus in Google Spreadsheet */function onOpen() { var menuItems = [ {name: 'Merge All Files From Current Folder', functionName: 'mergePDFDocumentsFromCurrentFolder'} ]; ss.addMenu('PDF.co', menuItems);}function mergePDFDocumentsFromCurrentFolder(){ var allFilesLink = getPDFFilesFromCurFolder(pdfCoAPIKey); mergePDFDocuments(allFilesLink, pdfCoAPIKey);}/** * Get all PDF files from current folder */function getPDFFilesFromCurFolder(pdfCoAPIKey) { var files = folder.getFiles(); var allFileUrls = []; while (files.hasNext()) { var file = files.next(); var fileName = file.getName(); if(fileName.endsWith(".pdf")){ // Create Pre-Signed URL from PDF.co var respPresignedUrl = getPDFcoPreSignedURL(fileName, pdfCoAPIKey) if(!respPresignedUrl.error){ var fileData = file.getBlob(); if(uploadFileToPresignedURL(respPresignedUrl.presignedUrl, fileData, pdfCoAPIKey)){ // Add Url allFileUrls.push(respPresignedUrl.url); } } } } return allFileUrls.join(",");}/** * Merges PDF URLs using PDF.co and Save to drive */function mergePDFDocuments(pdfUrl, pdfCoAPIKey) { // Get Cells for Input/Output let resultUrlCell = ss.getRange("A4"); // Prepare Payload var data = { "async": false, "encrypt": false, "inline": true, "name": "result", "url": pdfUrl }; // Prepare Request Options var options = { 'method' : 'post', 'contentType': 'application/json', 'headers': { "x-api-key": pdfCoAPIKey }, // Convert the JavaScript object to a JSON string. 'payload' : JSON.stringify(data) }; // Get Response // https://developers.google.com/apps-script/reference/url-fetch var pdfCoResponse = UrlFetchApp.fetch('https://api.pdf.co/v1/pdf/merge', options); var pdfCoRespContent = pdfCoResponse.getContentText(); var pdfCoRespJson = JSON.parse(pdfCoRespContent); // Display Result if(!pdfCoRespJson.error){ // Upload file to Google Drive uploadFile(pdfCoRespJson.url); // Update Cell with result URL resultUrlCell.setValue(pdfCoRespJson.url); } else{ resultUrlCell.setValue(pdfCoRespJson.message); }}/** * Gets PDF.co Presigned URL */function getPDFcoPreSignedURL(fileName, pdfCoAPIKey){ // Prepare Request Options var options = { 'method' : 'GET', 'contentType': 'application/json', 'headers': { "x-api-key": pdfCoAPIKey } }; var apiUrl = `https://api.pdf.co/v1/file/upload/get-presigned-url?name=${fileName}`; // Get Response // https://developers.google.com/apps-script/reference/url-fetch var pdfCoResponse = UrlFetchApp.fetch(apiUrl, options); var pdfCoRespContent = pdfCoResponse.getContentText(); var pdfCoRespJson = JSON.parse(pdfCoRespContent); return pdfCoRespJson;}/** * Uploads File to PDF.co PreSigned URL */function uploadFileToPresignedURL(presignedUrl, fileContent, pdfCoAPIKey){ // Prepare Request Options var options = { 'method' : 'PUT', 'contentType': 'application/octet-stream', 'headers': { "x-api-key": pdfCoAPIKey }, // Convert the JavaScript object to a JSON string. 'payload' : fileContent }; // Get Response // https://developers.google.com/apps-script/reference/url-fetch var pdfCoResponse = UrlFetchApp.fetch(presignedUrl, options); if(pdfCoResponse.getResponseCode() === 200){ return true; } else{ return false; }}/** * Save file URL to specific location */function uploadFile(fileUrl) { var fileContent = UrlFetchApp.fetch(fileUrl).getBlob(); folder.createFile(fileContent);}
If we quickly analyze the above source code, we’re doing the following.
Adding necessary references such as “Drive”, as well declaring constant for PDF.co API Key. We’re also getting references for the input Google Drive folder which contains input files.
In the Next Step, we’re iterating through all PDF files from a folder and uploading them to the PDF.co cloud. After the file is uploaded to PDF.co, we’re preparing an array of PDF.co cloud URLs.
Then we’re performing a merge using PDF.co URLs and saving result files to the output folder.