VintaSoft Twain .NET SDK v10.2
How to add acquired images to PDF document?

Acquired image can be saved to a new PDF document or added to an existing PDF document.


Example: Here is an example that shows how to add acquired images to a PDF document.

Imports System.Windows.Forms
Imports Vintasoft.Twain
Imports Vintasoft.Twain.ImageEncoders

''' <summary>
''' Class allows to scan and save image to a PDF document.
''' </summary>
Partial Public Class How_to_save_acquired_images_to_PDF_document
    Inherits Form

    ''' <summary>
    ''' TWAIN device manager.
    ''' </summary>
    Private _deviceManager As DeviceManager



    Public Sub New()
        InitializeComponent()

        ' create and open device manager
        _deviceManager = New DeviceManager(Me)
        _deviceManager.Open()
    End Sub



    ''' <summary>
    ''' Acquire images asynchronously.
    ''' </summary>
    Public Sub AcquireImagesAsynchronously()
        Try
            ' get reference to the default device
            Dim device1 As Device = _deviceManager.DefaultDevice

            ' subscribe to the device events
            AddHandler device1.ImageAcquired, New EventHandler(Of ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
            AddHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
            AddHandler device1.ScanFailed, New EventHandler(Of ScanFailedEventArgs)(AddressOf device_ScanFailed)
            AddHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)

            ' disable UI
            device1.ShowUI = False

            ' set Memory (or Native) transfer mode
            device1.TransferMode = TransferMode.Memory

            ' acquire images asynchronously
            device1.Acquire()
        Catch ex As TwainException
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Image is acquired.
    ''' </summary>
    Private Sub device_ImageAcquired(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
        Dim device As Device = DirectCast(sender, Device)

        ' set settings of PDF encoder
        Dim pdfEncoderSettings As New TwainPdfEncoderSettings()
        pdfEncoderSettings.PdfDocumentInfo.Author = "VintaSoft Ltd."
        pdfEncoderSettings.PdfDocumentInfo.Title = "Documents acquired from " + device.Info.ProductName
        pdfEncoderSettings.PdfDocumentInfo.Creator = "VintaSoft Twain .NET SDK"
        pdfEncoderSettings.PdfDocumentInfo.ModificationDate = DateTime.Now

        ' add acquired image to an existing PDF document
        e.Image.Save("d:\test.pdf", pdfEncoderSettings)

        ' dispose the acquired image
        e.Image.Dispose()
    End Sub

    ''' <summary>
    ''' Scan is canceled.
    ''' </summary>
    Private Sub device_ScanCanceled(ByVal sender As Object, ByVal e As EventArgs)
        MessageBox.Show("Scan is canceled.")
    End Sub

    ''' <summary>
    ''' Scan is failed.
    ''' </summary>
    Private Sub device_ScanFailed(ByVal sender As Object, ByVal e As Vintasoft.Twain.ScanFailedEventArgs)
        MessageBox.Show("Scan is failed: " + Convert.ToString(e.ErrorString))
    End Sub

    ''' <summary>
    ''' Scan is finished.
    ''' </summary>
    Private Sub device_ScanFinished(ByVal sender As Object, ByVal e As EventArgs)
        Dim device1 As Device = DirectCast(sender, Device)

        ' unsubscribe from device events
        RemoveHandler device1.ImageAcquired, New EventHandler(Of ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
        RemoveHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
        RemoveHandler device1.ScanFailed, New EventHandler(Of ScanFailedEventArgs)(AddressOf device_ScanFailed)
        RemoveHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)

        ' if device is not closed
        If device1.State <> DeviceState.Closed Then
            ' close the device
            device1.Close()
        End If

        MessageBox.Show("Scan is finished.")
    End Sub

End Class
              
using System;
using System.Windows.Forms;
using Vintasoft.Twain;
using Vintasoft.Twain.ImageEncoders;

namespace TwainExamples_CSharp
{
    /// <summary>
    /// Class allows to scan and save image to a PDF document.
    /// </summary>
    public partial class How_to_save_acquired_images_to_PDF_document : Form
    {

        /// <summary>
        /// TWAIN device manager.
        /// </summary>
        DeviceManager _deviceManager;



        public How_to_save_acquired_images_to_PDF_document()
        {
            InitializeComponent();

            // create and open device manager
            _deviceManager = new DeviceManager(this);
            _deviceManager.Open();
        }



        /// <summary>
        /// Acquire images asynchronously.
        /// </summary>
        public void AcquireImagesAsynchronously()
        {
            try
            {
                // get reference to the default device
                Device device = _deviceManager.DefaultDevice;

                // subscribe to the device events
                device.ImageAcquired += new EventHandler(device_ImageAcquired);
                device.ScanCanceled += new EventHandler(device_ScanCanceled);
                device.ScanFailed += new EventHandler(device_ScanFailed);
                device.ScanFinished += new EventHandler(device_ScanFinished);

                // disable UI
                device.ShowUI = false;

                // set Memory (or Native) transfer mode
                device.TransferMode = TransferMode.Memory;

                // acquire images asynchronously
                device.Acquire();
            }
            catch (TwainException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Image is acquired.
        /// </summary>
        private void device_ImageAcquired(object sender, Vintasoft.Twain.ImageAcquiredEventArgs e)
        {
            Device device = (Device)sender;

            // set settings of PDF encoder
            TwainPdfEncoderSettings pdfEncoderSettings = new TwainPdfEncoderSettings();
            pdfEncoderSettings.PdfDocumentInfo.Author = "VintaSoft Ltd.";
            pdfEncoderSettings.PdfDocumentInfo.Title = "Documents acquired from " + device.Info.ProductName;
            pdfEncoderSettings.PdfDocumentInfo.Creator = "VintaSoft Twain .NET SDK";
            pdfEncoderSettings.PdfDocumentInfo.ModificationDate = DateTime.Now;

            // add acquired image to an existing PDF document
            e.Image.Save(@"d:\test.pdf", pdfEncoderSettings);

            // dispose the acquired image
            e.Image.Dispose();
        }

        /// <summary>
        /// Scan is canceled.
        /// </summary>
        private void device_ScanCanceled(object sender, EventArgs e)
        {
            MessageBox.Show("Scan is canceled.");
        }

        /// <summary>
        /// Scan is failed.
        /// </summary>
        private void device_ScanFailed(object sender, Vintasoft.Twain.ScanFailedEventArgs e)
        {
            MessageBox.Show("Scan is failed: " + e.ErrorString);
        }

        /// <summary>
        /// Scan is finished.
        /// </summary>
        void device_ScanFinished(object sender, EventArgs e)
        {
            Device device = (Device)sender;

            // unsubscribe from device events
            device.ImageAcquired -= new EventHandler(device_ImageAcquired);
            device.ScanCanceled -= new EventHandler(device_ScanCanceled);
            device.ScanFailed -= new EventHandler(device_ScanFailed);
            device.ScanFinished -= new EventHandler(device_ScanFinished);

            // if device is not closed
            if (device.State != DeviceState.Closed)
                // close the device
                device.Close();

            MessageBox.Show("Scan is finished.");
        }

    }
}