Cloud API - PDF To Image API - VB.NET - Convert PDF To PNG From URL Asynchronously - ByteScout

Cloud API – PDF To Image API – VB.NET – Convert PDF To PNG From URL Asynchronously

  • Home
  • /
  • Articles
  • /
  • Cloud API – PDF To Image API – VB.NET – Convert PDF To PNG From URL Asynchronously

Cloud API – PDF To Image API – VB.NET – Convert PDF To PNG From URL Asynchronously


Imports System.IO
Imports System.Net
Imports System.Threading
Imports Newtonsoft.Json.Linq

' Cloud API asynchronous "PDF To PNG" job example.
' Allows to avoid timeout errors when processing huge or scanned PDF documents.

Module Module1

	' The authentication key (API Key).
	' Get your own by registering at
	Const API_KEY As String = "***********************************"

	' Source PDF file
	Const SourceFileUrl As String = ""
	' Comma-separated list of page indices (or ranges) to process. Leave empty for all pages. Example: '0,2-5,7-'.
	Const Pages As String = ""
	' PDF document password. Leave empty for unprotected documents.
	Const Password As String = ""
	' (!) Make asynchronous job
	Const Async As Boolean = True

	Sub Main()

		' Create standard .NET web client instance
		Dim webClient As WebClient = New WebClient()

		' Set API Key
		webClient.Headers.Add("x-api-key", API_KEY)

		' Prepare URL for `PDF To PNG` API call
		Dim query As String = Uri.EscapeUriString(String.Format(

			' Execute request
			Dim response As String = webClient.DownloadString(query)

			' Parse JSON response
			Dim json As JObject = JObject.Parse(response)

			If json("error").ToObject(Of Boolean) = False Then

				' Asynchronous job ID
				Dim jobId As String = json("jobId").ToString()
				' URL of generated JSON file available after the job completion; it will contain URLs of result PNG files.
				Dim resultJsonFileUrl As String = json("url").ToString()

				' Check the job status in a loop. 
				' If you don't want to pause the main thread you can rework the code 
				' to use a separate thread for the status checking and completion.
					Dim status As String = CheckJobStatus(jobId) ' Possible statuses: "InProgress", "Failed", "Aborted", "Finished".

					' Display timestamp and status (for demo purposes)
					Console.WriteLine(DateTime.Now.ToLongTimeString() + ": " + status)

					If status = "Finished" Then

						' Download JSON file as string
						Dim jsonFileString As String = webClient.DownloadString(resultJsonFileUrl)

						Dim resultFilesUrls As JArray = JArray.Parse(jsonFileString)

						' Download generated PNG files
						Dim page As Integer = 1
						For Each token As JToken In resultFilesUrls

							Dim resultFileUrl As String = token.ToString()
							Dim localFileName As String = String.Format(".\page{0}.png", page)

							webClient.DownloadFile(resultFileUrl, localFileName)

							Console.WriteLine("Downloaded ""{0}"".", localFileName)
							page = page + 1


						Exit Do

					ElseIf status = "InProgress" Then

						' Pause for a few seconds


						Exit Do

					End If


			End If

		Catch ex As WebException
		End Try


		Console.WriteLine("Press any key...")

	End Sub

	Function CheckJobStatus(jobId As String) As String

		Using webClient As WebClient = New WebClient()

			Dim url As String = "" + jobId

			Dim response As String = webClient.DownloadString(url)
			Dim json As JObject = JObject.Parse(response)

			Return Convert.ToString(json("Status"))

		End Using

	End Function

End Module

  Click here to get your Free Trial version of the SDK