venerdì 31 marzo 2023

Download gioco Tunche

 


Disponibile gratuitamente il gioco di azioneTunche per sistemi operativi Windows, con una grafica molto semplice a con una buona giocabilità.

Fino al 6 aprile 2023 il download è gratuito dopo tale data si potrà scaricare a pagamento.

Per maggiori informazioni e download visitate il seguente sito Tunche | Acquistalo e scaricalo subito sull'Epic Games Store 

Siti di icone ed immagini gratuite

Il sito Linea.Io,  https://linea.io/  offre la possibilità di scaricare gratuitamente immagini da utilizzare per uso personale.
Il sito è in lingua inglese ma facilmente utilizzabile, con una serie di immagini ed icone raggruppate per argomento.

giovedì 30 marzo 2023

Download gratuito gioco The Silent Age

 



Disponibile gratuitamente senza limitazioni  e senza limiti di tempo, il gioco di strategia The Silent Age, per sistemi operativi Windows e sistemo operativi Mac.

Fino al 6 aprile 2023 il download è gratuito dopo tale data sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito The Silent Age | Acquistalo e scaricalo subito sull'Epic Games Store

Non è possibile effettuare l'installazione a causa dei criteri impostati dall'amministratore di sistema

Quando si scarica da internet un programma d'installazione per aggiungere ai vari programmi di Windows qualcuno di proprio gradimento, può capitare di visualizzare il messaggio di errore: "Non è possibile effettuare l'installazione a causa dei criteri impostati dall'amministratore di sistema", può essere causato dal fatto che abbiamo installato la versione Windows 11 modalità S.
La modalità "S", sicurezza, non permette di installare i programmi se non dallo store di Microsoft, quindi andare nello store e cercare il programma di proprio interesse.
La modalità S, può essere disattivata (per sempre, non c'è modo di ritornare in questa versione) andato in "Impostazioni->aggiornamenti-> selezionare versione Home oppure Professional".
Verificare comunque se tramite lo store è possibile installare il programma.
 

mercoledì 29 marzo 2023

db2oledb provider is not registered on the local machine

Quando si fa uso dei database DB2, durante l'esecuzione del progetto .Net si può verificare che venga sollevata l'eccezione "db2oledb provider is not registered on the local machine" questa è dovuto al fatto che sul pc non è installato il provider, ossia i file, per collegarsi a questo database.
Per risolvere il problema, installare il provider dal seguente sito https://www.microsoft.com/it-IT/download/details.aspx?id=100917 selezionando la tipologia di sistema operativo, se 32 o 64 bit.

martedì 28 marzo 2023

C# la creazione dei pdf con il componente QuestPDF in .Net 7

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-la-creazione-dei-pdf-con-il-componente-ques_1823.aspx 


In questo articolo vedremo come creare un file pdf, quelli di sola lettura, con un componente gratuito e che offre delle interessanti funzionalità, il tutto tramite il linguaggio di programmazione C#, con l’ambiente di sviluppo Visual Studio 2022 e la versione del Framework 7.

Il codice sarà utilizzato in un progetto di tipo “App Windows Forms” ma si può utilizzare anche per applicazioni web, in particolare con la tecnologia “Asp.Net”.

Il componente gratuito che utilizzeremo è QuestPdf, qui https://www.questpdf.com/ il sito del progetto il quale è anche open source, qui https://github.com/QuestPDF/QuestPDF il sorgente su repository GIT, mentre qui https://www.nuget.org/packages/QuestPDF il riferimento Nuget.

La particolarità di questo componente è anche quella di offrire l’anteprima di come verrà creato il file pdf, durante la stesura del codice.

Un componente che offre la possibilità allo sviluppatore di creare file pdf anche con aspetti grafici e contenuti di livello professionale.

In questo articolo vedremo una semplice creazione di un file pdf per introdurre il lettore all’uso di questo componente, inserendo un testo che sarà il titolo, del testo normale, un’immagine e la numerazione delle pagine,  il tutto come mostrato in figura 1.


Figura 1 – Il risultato della creazione del file pdf


Creazione del progetto


Si crea un nuovo progetto tramite l’ambiente di sviluppo Visual Studio 2022 Community, con il linguaggio di programmazione C#, selezionando come progetto “App Windows Forms”, assegniamo al progetto un nome e nella finestra successiva impostiamo come versione del Framework la versione 7.

Aggiungiamo un pulsante con il quale eseguiremo il codice per la creazione del file pdf.

Ora non resta che aggiungere al progetto il componente “QuestPDF” possiamo farlo in due modi, il primo tramite la finestra “Nuget” di Visual Studio, e digitare nella casella di ricerca il testo “questpdf” il tutto come mostrato in figura 2. 


Figura 2 – L’aggiunta al progetto del riferimento al componente QuestPDF.


Altro modo e quello di digitare nel prompt di Nuget,  il comando di installazione del componente che è il seguente.


NuGet\Install-Package QuestPDF


Nel momento in cui scriviamo la versione è la 2022.12.1 del componente.


Stesura del codice

Terminata la fase per la predisposizione del progetto, non resta che scrivere il codice per la creazione del file pdf.

Passiamo in visualizzazione codice della form, ed in alto, sopra ad ogni dichiarazione, dobbiamo aggiungere lo spazio dei nomi per l’utilizzo delle classi di questo componente.

Di seguito si riporta il frammento di codice dello spazio dei nomi.


C#

using QuestPDF.Fluent;

using QuestPDF.Helpers;

using QuestPDF.Infrastructure;

using QuestPDF.Previewer;


Ritorniamo in visualizzazione grafica e facciamo doppio click sul pulsante,  in questo modo si passa in visualizzazione codice dell’evento click del pulsante.

Tramite il metodo “Create” della classe “Document” si crea un documento, al suo interno, tramite le sottoclassi “Page”, andiamo a scrivere il contenuto nel file pdf, mentre le classi “Header” e “Footer” rispettivamente permettono di gestire l’intestazione del documento e il piè di pagina, in quest’ultimo caso con la gestione della numerazione delle pagine tramite gli opportuni metodi.

Il metodo “GeneratePdf” crea il file pdf, mentre il metodo “ShowInPreviewer” permette l’anteprima di come verrà creato il file pdf


Di seguito si riporta il codice dell’evento “Click” delle suddette operazioni per la creazione del file “Pdf”.



C#

private void BtnCrea_Click(object sender, EventArgs e)

        {

 

            Document.Create(Document =>

            {

                Document.Page(page =>

                {

                    page.Size(PageSizes.A4);

                    page.Margin(2, Unit.Centimetre);

                    

                   

                    page.Header().Text("Prova").FontSize(22).FontColor(Colors.Green.Darken1).SemiBold();

                    page.DefaultTextStyle(x => x.FontSize(12));

                    page.Content().PaddingVertical(1, Unit.Centimetre)

                        .Column(Colonna =>

                            {

                                Colonna.Spacing(10);

                                Colonna.Item().Text("testo da inserire nella pagina  ");

                                Colonna.Item().Image("C:\\Varie\\ipro.jpg", ImageScaling.FitArea);

                                

 

                            });

                    page.Footer()

                    .AlignCenter()

                    .Text(testo =>

                    {

                        testo.DefaultTextStyle(p => p.FontSize(14));

                        testo.Span("Pagina ");

                        testo.CurrentPageNumber();

                        testo.Span("/");

                        testo.TotalPages();

                         

                         

                    }

 

                    );

 

 

                });

                

 

            }).GeneratePdf("C:\\Varie\\MioFileQuestPdf.pdf");

        }







Conclusioni


Le potenzialità offerte dal componente “QuestPDF” sono di grande aiuto al programmatore che deve gestire nelle proprie applicazioni la gestione dei file “Pdf”.

Un componente molto potente e con funzionalità molto interessanti che permettono di scrivere codice in maniera rapida e senza difficoltà.

Tramite la guida online, qui https://www.questpdf.com/introduction è possibile consultare l’utilizzo e le varie funzionalità con molti frammenti di codice.

lunedì 27 marzo 2023

download World of Warships — Starter Pack: Ishizuchi

 


Fino al 30 marzo 2023 è possibile scaricare gratuitamente il pacchetto Ishizuchi per il gioco World of warships.

Il pacchetto è in lingua italiane e per sistemi operativi Windows, fino al 30 marzo 2023 il download è gratuito dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito World of Warships — Starter Pack: Ishizuchi - Epic Games Store

Editor online per le immagini con intelligenza artificiale

 


Un editor molto avanzato e con interessanti funzionalità come per esempio la rimozione dello sfondo o di vari oggetti, quello offerto dal seguente sito https://myedit.online/it/photo-editor.

Il sito è in lingua italiana ed è facilmente utilizzabile, non richiede nessuna registrazione o indirizzo email.




domenica 26 marzo 2023

Download gioco Chess Ultra

 


Chess Ultra è un gioco di scacchi con una grafica molto accattivamene e che offre al giocatore una giocabilità molto interessante.

Il gioco è in lingua italiana e per sistemi operativi Windows.

Fino al 30 marzo 2023 si potrà scaricare gratuitamente dopo tale data il download sarà a pagamento, per download e maggiori informazioni visitate il seguente sito Chess Ultra | Acquistalo e scaricalo subito sull'Epic Games Store

Esplorazione interattiva dello spazio e del cosmo

 


Interessante il progetto della Nasa, con il quale permette di visitare in maniera interattiva il cosmo con alcuni ambiti particolari, come il sistema solare, gli asteroidi e tanto altro.

Dal seguente sito https://eyes.nasa.gov/ è possibile accedere a determinate funzionalità che permettono di scoprire il cosmo in forma multimediale e con moltissime informazioni.

Il sito è in lingua inglese.

sabato 25 marzo 2023

c# regex only positive numbers

L'espressione regolare qui di seguito, verifica se il numero digitato è positivo, ossia da 0 a 999999.

string Espressione= @"^[1-9]\d{0,5}$";
bool risultato = Regex.IsMatch(ValoreDaEsaminare, Espressione);

venerdì 24 marzo 2023

Programma gratuito di VPN planet



Se cercate un programma di VPN  gratuito, il sito planet free VPN offre una vpn gratuita.
Il sito è in lingua inglese ma facilmente utilizzabile.
E' possibile scaricare la versione gratuita, oltre a quelle a pagamento.
Per maggiori informazioni e download visitate il seguente sito https://freevpnplanet.com/

giovedì 23 marzo 2023

Windows 11 modalità s impossibile installare applicazioni

Nel caso che è installato il sistema operativo Windows 11 in modalità "S" non è possibile installare programmi scaricati da internet, se non quelli dallo Store di Microsoft.
Come riportato qui https://support.microsoft.com/it-it/windows/domande-frequenti-su-windows-10-e-windows-11-in-modalit%C3%A0-s-851057d6-1ee9-b9e5-c30b-93baebeebc85 solo  disabilitando questa funzionalità è possibile installare programmi da internet.
La modalità "S" permette di dotare il pc sicuro e più robusto.

mercoledì 22 marzo 2023

Motore di ricerca bing creazione immagini con l'intelligenza artificiale

 

Da qualche giorno il motore di ricerca Bing, permette la creazione gratuita di immagini tramite l'intelligenza artificiale.

Al momento, in versione anteprima, la creazione delle immagini avviene solo in lingua inglese.

Dopo aver scritto la frase in inglese, tramite il pulsante "Crea", verranno generate una serie di immagini.

Il sito è visibile qui https://www.bing.com/images/create 

C# linq group by

Nel caso che si ha la necessità di raggruppare dati, in maniera univoca evitando i doppioni, dopo il metodo Group, nella condizione utilizzare la funzione FirstOfDefault, in modo da permettere di ottenere il dato univoco.
Di seguito il frammento di codice di un possibile utilizzo di Group che non fa altro che raggruppare i dati e poi ottenere la distinct per il dato.


 var allegati = FonteDati
                .Where(g => !string.IsNullOrEmpty(g.NomeCampo))
                .GroupBy(g => g.Campo)
                .Select(g => g.FirstOrDefault())
                .Select(g=> new Classe
                { 
                    CampoDellaClasse = g.Campo
                })
                .ToList();

martedì 21 marzo 2023

C# creazione di un file pdf tramite la libreria gratuita PdfSharp in .Net 7

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-creazione-di-un-file-pdf-tramite-la-libreri_1822.aspx


In questo articolo vedremo come creare un file pdf, tramite la libreria gratuita PdfSharp http://www.pdfsharp.net/ il quale sorgente è disponibile anche su Git, qui https://github.com/empira/PDFsharp per la creazione e gestione dei file pdf.

La libreria è open source, e può essere utilizzato anche in ambito di programmi commerciali.

In questo articolo introduttivo vedremo come gestire in un progetto di tipo “app Windows Forms” con la versione del framework 7, e con il linguaggio di programmazione C# i file pdf, ed in particolare la creazione di un file pdf.

Nonostante la libreria non viene aggiornata da circa 5 anni, è possibile utilizzarla anche con l’ultima versione del Framework, attualmente il .Net 7, svolgendo ottimamente la gestione dei file pdf.

Verrà utilizzato l’ambiente di sviluppo Visual Studio 2022 community, il codice potrà essere utilizzato anche con versioni precedenti.


Creazione del progetto

Si crea un nuovo progetto di tipo “App Windows Forms” impostando un determinato nome al progetto ed un percorso, e selezionando la versione del Framework 7. 

Nella form aggiungiamo tre controlli, una label con la proprietà “Text” impostata su “Testo:”, un controllo casella di controllo, con la proprietà “Multiline” impostata a “True” e la proprietà “Name” impostata su “TxtTesto”, ed un controllo di tipo pulsante, con la proprietà “Name” impostata su “BtnCrea” e la proprietà “Text” impostata su “Crea”, il tutto come mostrato in figura 1.

Figura 1 - I controlli nella form


Terminata la fase di posizionamento dei vari controlli, non resta che aggiungere tramite Nuget, la libreria “PdfSharp” in modo da poter utilizzare le varie classi per la creazione dei file pdf.

Tramite Nuget ( Strumenti->Gestione Pacchetti Nuget->Gestione Pacchetti NuGet per la soluzione), installiamo il componente PdfSharp, selezionandolo dalla finestra come mostrato in figura 2, oppure tramite la seguente riga di comando “Nuget, NuGet\Install-Package PdfSharp -Version 1.50.5147”, dove la momento in cui viene pubblicato l’articolo è la versione “1.50.5147”.


Figura 2 – Il componente PdfSharp dalla finestra Nuget.



Stesura del codice


Terminata la preparazione del progetto con i controlli posizionati e l’aggiunta al componente “PdfSharp” non resta che scrivere il codice.

Passiamo in visualizzazione codice della nostra form, ed aggiungiamo lo spazio dei nomi per la gestione delle classi del componente “PdfSharp”, in alto, sopra ad ogni dichiarazione, aggiungiamo i namespace relativi a pdsfharp.



Qui di seguito si riporta il frammento di codice delle suddette operazioni.


C#

using PdfSharp;

using PdfSharp.Drawing;

using PdfSharp.Pdf;

using PdfSharp.Pdf.IO;


Ora passiamo in visualizzazione grafica e facciamo doppio click sul pulsante “Crea” in modo da passare in visualizzazione codice dell’evento click del pulsante.

In questo pulsante, andremo a creare il file pdf, impostando un titolo in grassetto al centro della pagina con una grandezza di 20, e sotto, il testo digitato nella casella di testo con un testo a 12 ed allineato a sinistra, il tutto come mostrato in figura 3.




Figura 3 – Il risultato della creazione del file pdf.


Per la creazione dei file pdf, occorre utilizzare la classe “PdfDocument” che permette di gestire i file “Pdf”, una classe “PdfPage” che permette di gestire le singole pagine, come il testo, immagini e tanto altro, un oggetto di tipo “XGraphics” per la gestione del testo nella pagine ed infine l’utilizzo della classe “Font” per gestire il tipo di scrittura, come grandezza, formattazione e tanto altro.

Il metodo “DrawString” permette di scrivere il testo nella pagina, mentre il metodo “Save” salva il documento con il nome e percorso impostato.

Di seguito si riporta il codice dell’evento click delle suddette operazioni. 


C#

private void BtnCrea_Click(object sender, EventArgs e)

        {

            try

            {

                //Creo un documento per la gestione del pdf

                PdfDocument documentoPdf = new PdfDocument();

                //Imposto il titolo

                documentoPdf.Info.Title = "Titolo del nuovo file Pdf";

                //Aggiungo una pagina

 

                PdfPage pagina = documentoPdf.AddPage();

                //Oggetto grafica per la scrittura nella pagina

                XGraphics XgfxScrittura = XGraphics.FromPdfPage(pagina);

                //Creo il font

                XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

                //Scrivo nella pagina il titolo

                XgfxScrittura.DrawString("Testo centrale!", font, XBrushes.Black, new XRect(0, 0, pagina.Width, 100), XStringFormats.Center);

                //Scrivo nella pagina il testo della form

                font = new XFont("Verdana", 12, XFontStyle.Regular);

                

                XgfxScrittura.DrawString(TxtTesto.Text, font, XBrushes.Black, 20, 100);

                //Salvo il file

                string PercorsoNomeFile = "C:\\Varie\\FileCreatoPdfSharp.pdf";

 

                documentoPdf.Save(PercorsoNomeFile);

                

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }


Prima di eseguire il codice, occorre inserire nel costruttore della form, dopo “InitializeComponent”, l’inizializzazione del “Encoding” altrimenti genera un errore dovuto al font, del tipo “No data is available for encoding 1252. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.”.

Nel costruttore aggiungere l’inizializzazione ad encoding, di seguito si riporta il frammento di codice.

C#

public Form1()

        {

            InitializeComponent();

             Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        }



Conclusioni

L’articolo ha fornito al lettore una panoramica introduttivo sulla creazione dei file pdf con una libreria gratuita ed open source, utilizzabile anche per progetti commerciali.

Le potenzialità offerte dalla libreria “PdfSharp” offre numerosi funzionalità nella gestione dei file “Pdf” fornendo al programmatore semplificazione nella stesura del codice, ma soprattutto rapidità nella creazione di applicazioni con il quale gestire questa tipologia di file.

lunedì 20 marzo 2023

Sito icone ed immagini gratuite

Un sito che fornisce interessanti immagini di tipo icone, png ed altri formati da scaricare gratuitamente.
Il sito https://www.flaticon.com/ costantemente aggiornato fornisce molte immagini che è possibile ricercare tramite parola chiave.
Il sito è in lingua inglese ma facilmente utilizzabile.

domenica 19 marzo 2023

Traffico aereo in tempo reale

 


Un sito molto interessante ed aggiornato che fornisce in tempo reale informazioni mondiali sul traffico aereo.

Il sito https://it.flightaware.com/ in lingua italiana fornisce interessanti dettagli sui singoli voli e sull'aereo.

Un sito molto ben fatto e funzionale.



sabato 18 marzo 2023

Download gioco Warhammer 40,000: Gladius - Relics of War

 


Un bellissimo gioco di guerra quello proposto da Epic Games questa settimana, con una grafica molto ben curata.

Il gioco Warhammer 40,000: Gladius - Relics of War, offre una buona giocabilità e grafica molto accattivante, il gioco è per sistemi operativi Windows.

Fino al 23 marzo 2023 si potrà scaricare gratuitamente dopo tale data il download sarà a pagamento, per il download e maggiori informazioni visitate il seguente sito Warhammer 40,000: Gladius - Relics of War | Acquistalo e scaricalo subito sull'Epic Games Store

Download modelli 3D della città di New York

 


Il sito Geopipe Digital Twins | Geopipe offre la possibilità di scaricare modelli in 3D da utilizzare nei propri video giochi o altri soluzioni informatiche sulla città di New york.

I modelli 3D sono molto ben fatti e danno un senso di realtà vero e proprio.

Per maggiori informazioni e download visitate il sito indicato. 

venerdì 17 marzo 2023

Lettore acs acr122u continuo beep nella lettura della CIE

 



Nell'utilizzare il lettore di carte NFC di Asc ACR122U appoggiando la CIE, continui ad emettere un continuo beep, questo è dovuto al posizionamento della carta.

Nel mio caso, ho tenuto la carta d'identità elettronica poco sopra il lettore (tramite un cioccolatino incartato ) figura 1, oppure metterla in maniera trasversale nella parte inferiore del lettore, come in figura 2.


Figura 1 - sollevata tramite un piccolo cioccolatino


Figura 2 - posizionata nella parte inferiore



giovedì 16 marzo 2023

C# .Net 7 lettura e creazione barcode anche nei file PDF




In questo articolo vedremo come utilizzare la libreria Zxing, per la generazione e lettura dei codici a barra e della libreria gratuita PdfSharp che permette la gestione dei file pdf.
L’articolo vuole fornire al lettore la creazione e lettura dei codice a barre, detti barcode, tramite applicazioni di tipo “Windows Application” con la versione del Framework 7, utilizzando l’ambiente di sviluppo Visual Studio 2022 Community ed il linguaggio di programmazione C#.
In particolare vedremo come si creano codici a barra dal testo e come leggere codici a barra da un file immagine o direttamente da un file di tipo Pdf.

Creazione del progetto

Si crea un nuovo progetto di tipo “App  Windows Forms”, assegnando un nome al progetto ed una determinata cartella (anche quella di default va bene) e selezionando come versione del Framework la 7.
Dopo aver creato il progetto posizioniamo nella form, due caselle di testo, tre controlli di tipo button, ed un controllo picturebox1, il tutto come mostrato in figura 1.
Figura 1 – La finestra con la generazione del codice a barra

Terminata la fase di posizionamento dei controlli, non resta che aggiungere al nostro progetto i riferimenti Nuget, delle librerie, in particolare della libreria Zxing, che al momento scriviamo è la 0.16.8 (https://www.nuget.org/packages/ZXing.Net/0.16.8) e due librerie per gestire i riferimenti grafici, che sono ZXing.Net.Bindings.ImageSharp e ZXing.Net.Bindings.Windows.Compatibility queste per gestire i codici a barra, mentre per i file pdf, la libreria PdfSharp https://www.nuget.org/packages/PDFsharp/1.50.5147 che al momento della pubblicazione dell’articolo è la versione 1.50.5147 , i componenti da installare devono essere quelli presenti in figura 2.

Figura 2 - La finestra Nuget con i componenti installati.

Terminata l’installazione dei componenti non resta che scrivere il codice.

Stesura del codice

Passiamo in visualizzazione codice in modo che possiamo scrivere le prime istruzioni di codice, in particolar modo aggiungere lo spazio dei nomi delle classi delle librerie.
Per passare in visualizzazione codice, o tramite la voce “Visualizzazione codice (tasto F7) “ oppure tramite doppio click sulla form, in modo da passare nell’evento load della form.
In alto sopra ad ogni dichiarazione, dobbiamo scrivere lo spazio dei nomi per la gestione del barcode e dei file pdf, tramite le librerie aggiunte prima.
Sopra aggiungiamo i seguenti nomi di spazio.


C#

using PdfSharp.Pdf;

using PdfSharp.Pdf.Advanced;

using PdfSharp.Pdf.IO;

using System.Drawing;

using ZXing;

using ZXing.Client.Result;

using ZXing.Common;

using ZXing.ImageSharp;

using ZXing.PDF417.Internal;

using ZXing.QrCode;

using ZXing.QrCode.Internal;

using ZXing.Rendering;

using ZXing.Windows.Compatibility;





Terminata questa parte, passiamo in visualizzazione grafica e facciamo doppio click sul primo pulsante, quello in alto, che permetterà di generare il barcode e visualizzarlo nel controllo picturebox.
Al doppio click sul pulsante, si passerà in visualizzazione codice, dell’evento click del pulsante, tramite la classe barcodeWriter, impostando alcune proprietà come il formato, il tipo di immagine bitmap e le dimensioni andremo ad impostare il formato del barcode, mentre con il metodo “Write” passando il testo presente nella casella di testo, andremo generare un oggetto di tipo Bitmap con l’immagine delle barre del testo passato. 
L’immagine Bitmap verrà salvata anche sul pc in un determinato percorso ed in formato “Jpeg”,
Di seguito si riporta il codice delle suddette operazioni.


C#

private void BtnGenera_Click(object sender, EventArgs e)

        {

            try

            {

 

 

                var GeneraBarcode = new BarcodeWriter

                {

                    Format = BarcodeFormat.CODE_128,

                    Options = new EncodingOptions

                    {

                        Height = 100,

                        Width = 100

                    },

                    Renderer = (IBarcodeRenderer<Bitmap>)Activator.CreateInstance(Renderer)

                };

                var risultato = GeneraBarcode.Write(TxtTesto.Text);

                var barcodeBitmap = new Bitmap(risultato);

                pictureBox1.Image = risultato;

                barcodeBitmap.Save(@"C:\Varie\Barcode2.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);

 

 

 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

 

 

 

        }


Ora non resta che testare il codice appena scritto, facendo attenzione a cambiare il percorso dove salvare il file, per testare quanto scritto.
Appurato la correttezza del codice, non resta che scrivere il codice per la selezione del file per la lettura del codice a barra.
Nel pulsante che si trova accanto alla seconda casella di testo, che è stata denominata “BtnCerca”, verrà una visualizzata una dialog per selezionare il file immagine o pdf al quale estrapolare il testo presente nell’immagine del barcode.
Facciamo doppio click su tale pulsante, in modo da passare in visualizzazione codice dell’evento del pulsante, utilizzando la classe dialog, impostando un filtro, riporteremo nella casella accanto, il percorso e nome del file selezionato.
Qui di seguito il frammento di codice delle suddette operazioni.


C#

  private void BtnCerca_Click(object sender, EventArgs e)

        {

             using (OpenFileDialog openDlg = new OpenFileDialog())

            {

                openDlg.FileName = TxtPercorsoNomeFile.Text;

                openDlg.Multiselect = false;

                openDlg.Filter = "PNG Files (*.png)|*.png|BMP Files (*.bmp)|*.bmp|TIFF Files (*.tif)|*.tif|JPG Files (*.jpg)|*.jpg|JEPG Files (*.jpeg)|*.jpeg|PDF Files (*.pdf)|*.pdf|Tutti Files (*.*)|*.*";

                if (openDlg.ShowDialog(this) == DialogResult.OK)

                {

                    TxtPercorsoNomeFile.Text = openDlg.FileName;

                }

             }

        }





Terminata la stesura della selezione dei file, non resta che scrivere il codice di alcune funzioni per la lettura del codice a barre delle immagini presenti nel file di tipo “Pdf”. Rimanendo sempre in visualizzazione codice, scriviamo una funzione che dato un oggetto di tipo “PdfDictionary” restituisce un oggetto di tipo Bitmap.
Si riporta qui di seguito il frammento della funzione.


C#

private   Bitmap EsportaImmagineJpeg(PdfDictionary image)

        {

            byte[] stream = image.Stream.Value;

            using (var memoryStream = new MemoryStream())

            {

                using (var binaryWriter = new BinaryWriter(memoryStream))

                {

                    binaryWriter.Write(stream);

                    memoryStream.Position = 0;

                    var result = (Bitmap)Bitmap.FromStream(memoryStream);

                    binaryWriter.Close();

 

                    return result;

                }

            }

        }


Continuando a rimanere in visualizzazione codice scriviamo una funzione che richiama quella precedente, in base al tipo di oggetto rilevato nel file pdf.
Di seguito si riporta il codice della funzione che estrapola da un oggetto di tipo PdfDictionary un oggetto di tipo immagine

C#

  Bitmap EsportaImmagine(PdfDictionary Immagine)

        {

            var TipoImmagine = string.Empty;

            var objFilter = Immagine.Elements.GetObject("/Filter");

            if (objFilter is PdfArray)

            {

                TipoImmagine = ((PdfArray)objFilter).Elements.GetName(0);

                 

            }

            else

            {

                TipoImmagine = Immagine.Elements.GetName("/Filter");

            }

            switch (TipoImmagine)

            {

                case "/DCTDecode":

                    return EsportaImmagineJpeg(Immagine);

 

                case "/FlateDecode":

                    break

 

                case "/JBIG2Decode":

                    break;

            }

            return null;

        }

 

Ora dobbiamo scrivere un’ultima funzione che effettua la lettura di tutte le pagine in cerca di oggetti che possono essere immagini.
La funzione qui di seguito, effettua su tutte le pagine presenti nel file “Pdf” la lettura dei vari oggetti, e verificare se l’oggetto individuato è di tipo immagine, su questa, ne estrapola l’immagine e poi tramite la classe per la gestione del barcode estrapola il testo qualora è un’immagine barcode.
La gestione dei file pdf avviene tramite le classi presenti nella libreria PdfSharp.

Di seguito si riporta il frammento di codice della funzione per la lettura dei vari oggetti presenti nel file pdf.


C#

public IEnumerable<Bitmap> OttieniImmaginiDaPdf(string PercorsoNomeFile)

        {

            PdfDocument document = PdfReader.Open(PercorsoNomeFile);

 

            //Effettuo un ciclo su tutte le pagine

            foreach (PdfPage pagina in document.Pages)

            {

                //Ottengo la risorsa per ogni  pagina

                PdfDictionary resources = pagina.Elements.GetDictionary("/Resources");

                if (resources != null)

                {

                    //Rilevo l'oggetto per la risorsa

                    PdfDictionary xObjects = resources.Elements.GetDictionary("/XObject");

                    if (xObjects != null)

                    {

                        var Elementi = xObjects.Elements.Values;

                        //Ciclo per ogni elemento trovato

                        foreach (PdfItem item in Elementi)

                        {

                            PdfReference pdfRefence = item as PdfReference;

                            if (pdfRefence != null)

                            {

                                PdfDictionary pdfDictionary = pdfRefence.Value as PdfDictionary;

                                 //Verifico che è un immagine

 

                                if (pdfDictionary != null && pdfDictionary.Elements.GetString("/Subtype") == "/Image")

                                {

                                    var bitmap = EsportaImmagine(pdfDictionary);

                                    if (bitmap != null)

                                    {

                                        yield return bitmap;

                                    }

                                }

                            }

                        }

                    }

                }

            }

        }




Ora passiamo in visualizzazione grafica in modo da fare doppio click sul pulsante situato sotto la seconda casella di testo, l’ultimo rimasto, che utilizzeremo per rilevare il testo presente nel barcode.
Passando in visualizzazione codice dell’evento click del pulsante, dobbiamo scrivere il codice che estrapola il testo dal file immagine, in particolar modo tramite il metodo “Decode” della classe “BarcodeReader” estrapoliamo il testo presente nell’immagine. Prima di utilizzare questo codice, verifichiamo se il file è un pdf oppure immagine, in caso che è un file, rileva le varie immagini ed estrapola il testo, qualora non siano codici a barre, verrà restituito null, altrimenti il testo presente nel codice a   barra.
Tramite la proprietà “Text” dell’oggetto restituito del metodo “Decode”, verrà riportato nella casella di testo, il contenuto del barcode.
Di seguito si riporta il frammento di codice delle suddette operazioni da inserire nell’evento click del pulsante.


C#

private void BtnLeggi_Click(object sender, EventArgs e)

        {

            try

            {

 

                 

                BarcodeReader barcodeReader = new BarcodeReader();

                 

                if (TxtPercorsoNomeFile.Text.Contains(".pdf"))

                {

                    var immagini = OttieniImmaginiDaPdf(TxtPercorsoNomeFile.Text);

                    foreach (var immagine in immagini)

                    {

                         

                        var testoRilevato = barcodeReader.Decode(immagine);

                        if (testoRilevato != null)

                        {

                            TxtTesto.Text = testoRilevato.Text;

                        }

 

                    }

                }

                else

                {

                    Bitmap bitmap = new Bitmap(TxtPercorsoNomeFile.Text);

                    var testoRilevato = barcodeReader.Decode(bitmap);

 

                    if (testoRilevato != null)

                    {

                        TxtTesto.Text = testoRilevato.Text;

                    }

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 





Prima di effettuare le prove, dobbiamo creare un file immagine con barcode, che possiamo utilizzare quello con cui abbiamo scritto il codice per la creazione, mentre per il file pdf, possiamo creare un file tramite Word o altro programma che permette la creazione dei file pdf, aggiungendo il file immagine del barcode creato in precedenza.

Conclusioni

L’articolo ha voluto fornite al lettore un’ampia gestione dei barcode utilizzando le librerie gratuite utilizzabili anche in ambito commerciale come la libreria PdfSharp.
Il lettore dalla base tecnica fornito può ampliare con funzionalità avanzate o scenari più complessi l’utilizzo di queste librerie.
Il frammento di codice si può utilizzare anche con altre versione del Framework, precedenti alla 7, quale la 6 o 5 ed anche in ambito Web, come la tecnologia Asp.Net, apportando le modifiche richieste per lo scenario web.
La libreria PdfSharp offre una serie di classi, offrendo al programmatore funzionalità anche avanzate e soprattutto facilitando nella stesura del codice.