In questo articolo vedremo come utilizzare nelle nostre applicazioni lo scanner per effettuare la scansione di documenti.
Può capitare che nelle nostre applicazioni c’è bisogno di utilizzare lo scanner per salvare in vari formati (png, jpg, tiff, etc) dei file.
In questo articolo, vedremo come in un progetto di tipo “Windows Application” ma applicabile anche in applicazioni web, con opportune modifiche, si possono effettuare le scansioni, tramite l’utilizzo dei riferimenti a “Microsoft Windows Image Acquisition Library”, una libreria utilizzata da Windows per effettuare la scansioni di documenti.
In questa serie di articoli, divise in due parti, vedremo come tramite i linguaggi di programmazione più utilizzati in .Net, come Visual Basic .Net e C#, si effettua una scansione, si salva il file e si visualizza l’anteprima.
Naturalmente viene illustrata una valida panoramica e non temi avanzati, come si potrebbe affrontare l’impostazione della dimensione o le impostazioni del dispositivo hardware su alcune funzionalità che lo scanner può fornire o altri temi, perché diverrebbe tema troppo lungo ma soprattutto materia di creazione di un programma avanzato per la scansione di documenti, l’articolo vuole solo fornire al lettore come poter fornire le basi per effettuare una scansione di documenti, il classico programma di scansione di Windows.
Creazione del progetto
Si apre Visual Studio 2017 o altra versione, e si seleziona tra le categorie “Desktop” e poi tra i modelli presenti “Windows Application”.
Terminata la creazione verrà aperto una Windows Form, che in altri articoli si è parlato e discusso.
Nella forma, aggiungiamo un controllo di tipo “listBox” denominato “ListScanner” che permetterà di visualizzare la lista dei scanner collegati al pc, in particolare il nome dello scanner.
Aggiungere due controlli di tipo “Label” con l’obiettivo di visualizzare la descrizione dei due campi, un controllo di “Textbox” con la proprietà nome impostata a “txtPercorsoNomeFile” un controllo “Button” accanto alla casella di testo in modo che visualizza una finestra di dialogo per il salvataggio del file scansionato denominato “btnSalva”, un controllo di “ComboBox” con la proprietà “Nome” impostata su “cmbFormato” con il compito di visualizzare il tipo di file da salvare ed un controllo pulsante, denominato “BtnScansiona” con il quale si effettuerà la scansione. Infine un controllo “pictureBox” denominato “pictureBox1” che avrà il compito di visualizzare l’anteprima dell’immagine.
Il tutto dev’essere simile a come illustrato in figura 1.
Figura 1 – La form con i vari controlli in fase di utilizzo.
Terminata la creazione della form, non resta che aggiungere il riferimento al componente “COM” WIA (Windows Image Acquisition) che permetterà di gestire lo scanner ed effettuare le scansioni.
In esplora soluzione, sul nome del progetto, facciamo click con il tasto destro del mouse e dal menu che viene visualizzato, selezioniamo la voce “Aggiungi” e dal sotto menu la voce “Riferimento”, verrà aperta una finestra, e selezioniamo la voce di menu “COM” posta sulla sinistra, tra le varie voci cerchiamo quella con la dicitura “Microsoft Windows Image Acquisition Library V2.0” e mettiamo una spunta su tale voce, il tutto come riportato in figura 2.
Figura 2 – La selezione del componente COM.
A questo punto, confermiamo il tutto tramite il pulsante “OK” in modo che viene chiusa la finestra ed aggiunto al progetto il componente.
Inseriamo nella casella combinata, i valori “Jpg”, “Tiff” e “Png” nella proprietà Items.
Stesura del codice
Terminata la fase di impostazione della form e dell’aggiunta del componente scriviamo il codice per effettuare la scansione.
La prima operazione che bisogna fare è quella di aggiungere lo spazio dei nomi per la gestione dello scanner, delle immagini e dei file.
Passiamo in visualizzazione codice, e sopra, in alto sopra ad ogni dichiarazione scriviamo i vari namespace.
Qui di seguito i frammenti di codice per entrambi i linguaggi.
VB.Net
Imports WIA
Imports System.Runtime.InteropServices
Imports System.IO
C#
using WIA;
using System.IO;
using System.Runtime.InteropServices;
Fatto ciò passiamo in visualizzazione grafica della form e facciamo doppio click sulla form, in questo modo si passa automaticamente in modalità codice dell’evento “Load” della form.
Questo evento, permetterà di caricare nel controllo “listbox” la lista degli scanner.
Tramite la classe “DeviceManager” faremo un ciclo tra i vari dispositivi collegati escludendo quelli che non sono di tipo “Scanner” tramite la proprietà “ScannerDeviceType” .
Se sono scanner, tramite la proprietà “Name” andiamo a rilevare il nome del dispositivo da visualizzare nell’elenco.
Qui di seguito si riporta il frammento di codice di tali dichiarazione per i linguaggi Visual Basic Net e C#
VB.Net
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim deviceManager = New DeviceManager()
For i As Integer = 1 To deviceManager.DeviceInfos.Count
If deviceManager.DeviceInfos(i).Type <> WiaDeviceType.ScannerDeviceType Then
Continue For
End If
listScanner.Items.Add(deviceManager.DeviceInfos(i).Properties("Name").Value.ToString())
Next
cmbFormato.SelectedIndex = 0
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
var deviceManager = new DeviceManager();
for (int i = 1; i <= deviceManager.DeviceInfos.Count; i++)
{
if (deviceManager.DeviceInfos[i].Type != WiaDeviceType.ScannerDeviceType)
{
continue;
}
listScanner.Items.Add(deviceManager.DeviceInfos[i].Properties["Name"].get_Value().ToString());
}
cmbFormato.SelectedIndex = 0;
}
Conclusioni
Termina la prima parte di questi due articoli riguardante la gestione dello scanner, abbiamo impostato la nostra form per utilizzare le fasi più comuni, predisponendo graficamente i controlli che permettono la scansione, elenco degli scanner e l’anteprima, oltre naturalmente ad aver fatto riferimento al componente COM che andremo ad utilizzare.
Nella seconda ed ultima parte, vedremo come effettuare la scansione, salvare il file sul nostro pc e visualizzarlo in anteprima.