text: import os
  import requests # pip install requests
  
  # 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 = ""
  # OCR language. "eng", "fra", "deu", "spa"  supported currently. Let us know if you need more.
  Language = "eng"
  # Destination PDF file name
  DestinationFile = ".\\result.pdf"
  
  
  def main(args = None):
      uploadedFileUrl = uploadFile(SourceFile)
      if (uploadedFileUrl != None):
          makeSearchablePDF(uploadedFileUrl, DestinationFile)
  
  
  def makeSearchablePDF(uploadedFileUrl, destinationFile):
      """Make Uploaded PDF file Searchable using PDF.co Web API"""
  
      # Prepare requests params as JSON
      # See documentation: https://apidocs.pdf.co
      parameters = {}
      parameters["name"] = os.path.basename(destinationFile)
      parameters["password"] = Password
      parameters["pages"] = Pages
      parameters["lang"] = Language
      parameters["url"] = uploadedFileUrl
  
      # Prepare URL for 'Make Searchable PDF' API request
      url = "{}/pdf/makesearchable".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:
              #  Get URL of result file
              resultFileUrl = json["url"]            
              # Download result file
              r = requests.get(resultFileUrl, stream=True)
              if (r.status_code == 200):
                  with open(destinationFile, 'wb') as file:
                      for chunk in r:
                          file.write(chunk)
                  print(f"Result file saved as \"{destinationFile}\" file.")
              else:
                  print(f"Request error: {response.status_code} {response.reason}")
          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()