Cloud API - PDF Splitting - VB.NET - Split PDF From URL Asynchronously - ByteScout

Cloud API – PDF Splitting – VB.NET – Split PDF From URL Asynchronously

  • Home
  • /
  • Articles
  • /
  • Cloud API – PDF Splitting – VB.NET – Split PDF From URL Asynchronously

Cloud API – PDF Splitting – VB.NET – Split PDF From URL Asynchronously


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

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

Module Module1

	' (!) If you are getting '(403) Forbidden' error please ensure you have set the correct API_KEY

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

	' Source PDF file to split
	Const SourceFileUrl As String = ""
	' Comma-separated list of page numbers (or ranges) to process. Example: '1,3-5,7-'.
	Const Pages As String = "1-2,3-"
	' (!) 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 `Split PDF` 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 PDF 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 PDF files
						Dim part As Integer = 1
						For Each token As JToken In resultFilesUrls

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

							webClient.DownloadFile(resultFileUrl, localFileName)

							Console.WriteLine("Downloaded ""{0}"".", localFileName)
							part = part + 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