VintaSoft Imaging .NET SDK 14.0: Documentation for .NET developer
In This Topic
    OCR: How to acquire image from TWAIN scanner and generate searchable PDF document?
    In This Topic
    Here is C#/VB.NET code that shows how to acquire image from TWAIN scanner, recognize text in scanned image and create searchable PDF document based on OCR results:
    class ScanAndConvertToSearchablePdfDcoument
    {
        /// <summary>
        /// Acquires image from scanner,
        /// recognizes text on images and
        /// saves the result as a searchable PDF document.
        /// </summary>
        /// <remarks>
        /// VintaSoft Twain .NET SDK (Vintasoft.Twain.dll),
        /// VintaSoft Imaging .NET SDK (Standard) (Vintasoft.Imaging.dll),
        /// VintaSoft Document Cleanup .NET Plug-in (Vintasoft.Imaging.DocCleanup.dll),
        /// VintaSoft OCR .NET Plug-in (Vintasoft.Imaging.Ocr.dll, Vintasoft.Imaging.Ocr.Tesseract.dll),
        /// VintaSoft PDF .NET Plug-in (Vintasoft.Imaging.Pdf.dll, Vintasoft.Imaging.Pdf.Ocr.dll) and
        /// and VintaSoft PDF .NET Plug-in (Writer) (Vintasoft.Pdf.dll) are necessary
        /// for executing this sample.
        /// </remarks>
        public static void ScanImagesAndSaveAsSearchablePdfDocument(
            Vintasoft.Imaging.Ocr.OcrLanguage language,
            string outputPdfFilename)
        {
            System.Console.WriteLine("Create TWAIN device manager...");
            using (Vintasoft.Twain.DeviceManager deviceManager = 
                new Vintasoft.Twain.DeviceManager())
            {
                // create PDF document
                using (Vintasoft.Imaging.Pdf.PdfDocument pdfDocument = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(outputPdfFilename, Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14))
                {
                    // create PDF document builder
                    Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder documentBuilder = 
                        new Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder(pdfDocument);
                    documentBuilder.ImageCompression = Vintasoft.Imaging.Pdf.PdfCompression.Auto;
                    documentBuilder.PageCreationMode = Vintasoft.Imaging.Pdf.Ocr.PdfPageCreationMode.ImageOverText;
    
                    System.Console.WriteLine("Create Tesseract OCR engine...");
                    using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr = 
                        new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr())
                    {
                        // create OCR engine manager
                        Vintasoft.Imaging.Ocr.OcrEngineManager engineManager =
                            new Vintasoft.Imaging.Ocr.OcrEngineManager(tesseractOcr);
    
                        Vintasoft.Imaging.Ocr.OcrEngineSettings settings = 
                            new Vintasoft.Imaging.Ocr.OcrEngineSettings(language);
    
                        System.Console.WriteLine("Open TWAIN device manager...");
                        deviceManager.Open();
    
                        Vintasoft.Twain.Device device = deviceManager.DefaultDevice;
    
                        Vintasoft.Twain.AcquireModalState acquireState;
                        do
                        {
                            System.Console.WriteLine("Acquire image from scanner...");
                            acquireState = device.AcquireModal();
                            if (acquireState == Vintasoft.Twain.AcquireModalState.ImageAcquired)
                            {
                                // create VintasoftImage
                                using (Vintasoft.Imaging.VintasoftImage image =
                                    new Vintasoft.Imaging.VintasoftImage(device.AcquiredImage.GetAsVintasoftBitmap(), true))
                                {
                                    // preprocess image
                                    // BorderClear, Despeckle, Deskew, Segmentation
                                    System.Console.WriteLine("Preprocess the image...");
                                    Vintasoft.Imaging.ImageProcessing.Document.OcrPreprocessingCommand preprocessing =
                                        new Vintasoft.Imaging.ImageProcessing.Document.OcrPreprocessingCommand();
                                    preprocessing.Binarization = null;
                                    preprocessing.ExecuteInPlace(image);
    
                                    // recognize image
                                    System.Console.WriteLine("Recognize the image...");
                                    Vintasoft.Imaging.Ocr.Results.OcrPage page = engineManager.Recognize(image, settings,
                                        preprocessing.SegmentationTextRegions);
    
                                    // add page to PDF document
                                    System.Console.WriteLine("Add page to PDF document...");
                                    documentBuilder.AddPage(image, page);
                                }
    
                                // dispose the acquired image
                                device.AcquiredImage.Dispose();
                            }
                        }
                        while (acquireState != Vintasoft.Twain.AcquireModalState.None);
    
                        System.Console.WriteLine("Save changes in PDF document...");
                        pdfDocument.SaveChanges();
                    }
                }
            }
        }
    }
    
    Class ScanAndConvertToSearchablePdfDcoument
        ''' <summary>
        ''' Acquires image from scanner,
        ''' recognizes text on images and
        ''' saves the result as a searchable PDF document.
        ''' </summary>
        ''' <remarks>
        ''' VintaSoft Twain .NET SDK (Vintasoft.Twain.dll),
        ''' VintaSoft Imaging .NET SDK (Standard) (Vintasoft.Imaging.dll),
        ''' VintaSoft Document Cleanup .NET Plug-in (Vintasoft.Imaging.DocCleanup.dll),
        ''' VintaSoft OCR .NET Plug-in (Vintasoft.Imaging.Ocr.dll, Vintasoft.Imaging.Ocr.Tesseract.dll),
        ''' VintaSoft PDF .NET Plug-in (Vintasoft.Imaging.Pdf.dll, Vintasoft.Imaging.Pdf.Ocr.dll) and
        ''' and VintaSoft PDF .NET Plug-in (Writer) (Vintasoft.Pdf.dll) are necessary
        ''' for executing this sample.
        ''' </remarks>
        Public Shared Sub ScanImagesAndSaveAsSearchablePdfDocument(language As Vintasoft.Imaging.Ocr.OcrLanguage, outputPdfFilename As String)
            System.Console.WriteLine("Create TWAIN device manager...")
            Using deviceManager As New Vintasoft.Twain.DeviceManager()
                ' create PDF document
                Using pdfDocument As New Vintasoft.Imaging.Pdf.PdfDocument(outputPdfFilename, Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14)
                    ' create PDF document builder
                    Dim documentBuilder As New Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder(pdfDocument)
                    documentBuilder.ImageCompression = Vintasoft.Imaging.Pdf.PdfCompression.Auto
                    documentBuilder.PageCreationMode = Vintasoft.Imaging.Pdf.Ocr.PdfPageCreationMode.ImageOverText
    
                    System.Console.WriteLine("Create Tesseract OCR engine...")
                    Using tesseractOcr As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr()
                        ' create OCR engine manager
                        Dim engineManager As New Vintasoft.Imaging.Ocr.OcrEngineManager(tesseractOcr)
    
                        Dim settings As New Vintasoft.Imaging.Ocr.OcrEngineSettings(language)
    
                        System.Console.WriteLine("Open TWAIN device manager...")
                        deviceManager.Open()
    
                        Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice
    
                        Dim acquireState As Vintasoft.Twain.AcquireModalState
                        Do
                            System.Console.WriteLine("Acquire image from scanner...")
                            acquireState = device.AcquireModal()
                            If acquireState = Vintasoft.Twain.AcquireModalState.ImageAcquired Then
                                ' create VintasoftImage
                                Using image As New Vintasoft.Imaging.VintasoftImage(device.AcquiredImage.GetAsVintasoftBitmap(), True)
                                    ' preprocess image
                                    ' BorderClear, Despeckle, Deskew, Segmentation
                                    System.Console.WriteLine("Preprocess the image...")
                                    Dim preprocessing As New Vintasoft.Imaging.ImageProcessing.Document.OcrPreprocessingCommand()
                                    preprocessing.Binarization = Nothing
                                    preprocessing.ExecuteInPlace(image)
    
                                    ' recognize image
                                    System.Console.WriteLine("Recognize the image...")
                                    Dim page As Vintasoft.Imaging.Ocr.Results.OcrPage = engineManager.Recognize(image, settings, preprocessing.SegmentationTextRegions)
    
                                    ' add page to PDF document
                                    System.Console.WriteLine("Add page to PDF document...")
                                    documentBuilder.AddPage(image, page)
                                End Using
    
                                ' dispose the acquired image
                                device.AcquiredImage.Dispose()
                            End If
                        Loop While acquireState <> Vintasoft.Twain.AcquireModalState.None
    
                        System.Console.WriteLine("Save changes in PDF document...")
                        pdfDocument.SaveChanges()
                    End Using
                End Using
            End Using
        End Sub
    End Class