How Can I Set Up the Default OCR Engine to Be GdPicture OCR?

There are two ways to set up GdPicture OCR as the default OCR engine. The first one is by modifying the web service configuration:

<!-- The default OCR engine to use. For a list of available OCR engines, see
the <ocrProcessors> section below. This may require third-party software. -->
<add key="OCR.Default" value="GdPictureOCR"/>

The second way is to specify the desired OCR engine directly from the code:

static void Main(string[] args)
{
    DocumentConverterServiceClient client = null;

    try
    {
        // ** Delete any processed files from a previous run.
        foreach (FileInfo f in new DirectoryInfo(".").GetFiles("*_ocr.pdf"))
            f.Delete();

        // ** Determine the source file and read it into a byte array.
        string sourceFileName = null;
        if (args.Length == 0)
        {
            // ** If nothing is specified, then read the first PDF file from the current folder.
            string[] sourceFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.pdf");
            if (sourceFiles.Length > 0)
                sourceFileName = sourceFiles[0];
            else
            {
                Console.WriteLine("Please specify a document to OCR.");
                Console.ReadKey();
                return;
            }
        }
        else
            sourceFileName = args[0];

        byte[] sourceFile = File.ReadAllBytes(sourceFileName);

        // ** Open the service and configure the bindings.
        client = OpenService(SERVICE_URL);

        //** Set the absolute minimum open options.
        OpenOptions openOptions = new OpenOptions();
        openOptions.OriginalFileName = Path.GetFileName(sourceFileName);
        openOptions.FileExtension = Path.GetExtension(sourceFileName);

        // ** Set the absolute minimum conversion settings.
        ConversionSettings conversionSettings = new ConversionSettings();

        // ** OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR
        OCRSettings ocr = new OCRSettings();
        ocr.Language = OCRLanguage.English.ToString();
        ocr.OCREngine = "GdPictureOCR";
        conversionSettings.OCRSettings = ocr;
        // ** OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR OCR

        // ** Carry out the conversion.
        Console.WriteLine("Processing file " + sourceFileName + ".");
        byte[] convFile = client.ProcessChanges(sourceFile, openOptions, conversionSettings);

        // ** Write the processed file back to the file system with a PDF extension.
        string destinationFileName = Path.GetFileNameWithoutExtension(sourceFileName) + "_ocr.pdf";
        using (FileStream fs = File.Create(destinationFileName))
        {
            fs.Write(convFile, 0, convFile.Length);
            fs.Close();
        }

        Console.WriteLine("File written to " + destinationFileName);

        // ** Open the generated PDF file in a PDF reader.
        Console.WriteLine("Launching file in PDF Reader");
        Process.Start(destinationFileName);
    }
    catch (FaultException<WebServiceFaultException> ex)
    {
        Console.WriteLine("FaultException occurred: ExceptionType: " +
                            ex.Detail.ExceptionType.ToString());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        CloseService(client);
    }
    Console.ReadKey();
}

/// <summary>
/// Configure the bindings and endpoints and open the service using the specified address.
/// </summary>
/// <returns>An instance of the web service.</returns>
public static DocumentConverterServiceClient OpenService(string address)
{
    DocumentConverterServiceClient client = null;

    try
    {
        BasicHttpBinding binding = new BasicHttpBinding();
        // ** Use standard Windows Security.
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType =
                                                        HttpClientCredentialType.Windows;
        // ** Increase the client timeout to deal with (very) long running requests.
        binding.SendTimeout = TimeSpan.FromMinutes(120);
        binding.ReceiveTimeout = TimeSpan.FromMinutes(120);
        // ** Set the maximum document size to 50MB
        binding.MaxReceivedMessageSize = 50 * 1024 * 1024;
        binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024;
        binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024;

        // ** Specify an identity (any identity) to get past .net3.5 sp1.
        EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown");
        EndpointAddress epa = new EndpointAddress(new Uri(address), epi);

        client = new DocumentConverterServiceClient(binding, epa);

        client.Open();

        return client;
    }
    catch (Exception)
    {
        CloseService(client);
        throw;
    }
}

/// <summary>
/// Check if the client is open and then close it.
/// </summary>
/// <param name="client">The client to close</param>
public static void CloseService(DocumentConverterServiceClient client)
{
    if (client != null && client.State == CommunicationState.Opened)
        client.Close();
}