PDF to image API in Python with PDF.co Web API

PDF.co Web API is 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)

ConvertPdfToImageFromUploadedFile.py

      
import os import requests # pip install requests # The following options are available through profiles: # (JSON can be single/double-quoted and contain comments.) # { # "profiles": [ # { # "profile1": { # "TextSmoothingMode": "HighQuality", // Valid values: "HighSpeed", "HighQuality" # "VectorSmoothingMode": "HighQuality", // Valid values: "HighSpeed", "HighQuality" # "ImageInterpolationMode": "HighQuality", // Valid values: "HighSpeed", "HighQuality" # "RenderTextObjects": true, // Valid values: true, false # "RenderVectorObjects": true, // Valid values: true, false # "RenderImageObjects": true, // Valid values: true, false # "RenderCurveVectorObjects": true, // Valid values: true, false # "JPEGQuality": 85, // from 0 (lowest) to 100 (highest) # "TIFFCompression": "LZW", // Valid values: "None", "LZW", "CCITT3", "CCITT4", "RLE" # "RotateFlipType": "RotateNoneFlipNone", // RotateFlipType enum values from here: https://docs.microsoft.com/en-us/dotnet/api/system.drawing.rotatefliptype?view=netframework-2.0 # "ImageBitsPerPixel": "BPP24", // Valid values: "BPP1", "BPP8", "BPP24", "BPP32" # "OneBitConversionAlgorithm": "OtsuThreshold", // Valid values: "OtsuThreshold", "BayerOrderedDithering" # "FontHintingMode": "Default", // Valid values: "Default", "Stronger" # "NightMode": false // Valid values: true, false # } # } # ] # } # The authentication key (API Key). # Get your own by registering at https://app.pdf.co/documentation/api API_KEY = "******************************************" # Base URL for PDF.co Web API requests BASE_URL = "https://api.pdf.co/v1" # Source PDF file SourceFile = ".\\sample.pdf" # Comma-separated list of page indices (or ranges) to process. Leave empty for all pages. Example: '0,2-5,7-'. Pages = "" # PDF document password. Leave empty for unprotected documents. Password = "" # Advanced Options Profiles = "{ 'profiles': [ { 'profile1': { 'ImageBitsPerPixel': 'BPP1' } } ] }" def main(args = None): uploadedFileUrl = uploadFile(SourceFile) if (uploadedFileUrl != None): convertPdfToImage(uploadedFileUrl) def convertPdfToImage(uploadedFileUrl): """Converts PDF To Image using PDF.co Web API""" # Prepare requests params as JSON # See documentation: https://apidocs.pdf.co parameters = {} parameters["password"] = Password parameters["pages"] = Pages parameters["url"] = uploadedFileUrl parameters["profiles"] = Profiles # Prepare URL for 'PDF To PNG' API request url = "{}/pdf/convert/to/png".format(BASE_URL) # Execute request and get response as JSON response = requests.post(url, data=parameters, headers={ "x-api-key": API_KEY }) if (response.status_code == 200): json = response.json() if json["error"] == False: # Download generated PNG files part = 1 for resultFileUrl in json["urls"]: # Download Result File r = requests.get(resultFileUrl, stream=True) localFileUrl = f"Page{part}.png" if r.status_code == 200: with open(localFileUrl, 'wb') as file: for chunk in r: file.write(chunk) print(f"Result file saved as \"{localFileUrl}\" file.") else: print(f"Request error: {response.status_code} {response.reason}") part = part + 1 else: # Show service reported error print(json["message"]) else: print(f"Request error: {response.status_code} {response.reason}") def uploadFile(fileName): """Uploads file to the cloud""" # 1. RETRIEVE PRESIGNED URL TO UPLOAD FILE. # Prepare URL for 'Get Presigned URL' API request url = "{}/file/upload/get-presigned-url?contenttype=application/octet-stream&name={}".format( BASE_URL, os.path.basename(fileName)) # Execute request and get response as JSON response = requests.get(url, headers={ "x-api-key": API_KEY }) if (response.status_code == 200): json = response.json() if json["error"] == False: # URL to use for file upload uploadUrl = json["presignedUrl"] # URL for future reference uploadedFileUrl = json["url"] # 2. UPLOAD FILE TO CLOUD. with open(fileName, 'rb') as file: requests.put(uploadUrl, data=file, headers={ "x-api-key": API_KEY, "content-type": "application/octet-stream" }) return uploadedFileUrl else: # Show service reported error print(json["message"]) else: print(f"Request error: {response.status_code} {response.reason}") return None if __name__ == '__main__': main()

VIDEO

ON-PREMISE OFFLINE SDK

Get 60 Day Free Trial

See also:

ON-DEMAND REST WEB API

Get Your API Key

See also: