domenica 14 febbraio 2016

.Net scaricare immagine dello sfondo di bing tramite VB.Net e C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-scaricare-un-immagine-da-bing-tramit_1429.aspx

Introduzione

In questo articolo vedremo una tecnica di come scaricare una foto da internet, la tecnica utilizzata è particolare perché non scaricheremo l’immagine da un qualsiasi sito, ma l’immagine giornaliera che il motore di ricerca Bing offre ogni giorno ai suoi utenti.
Tramite il linguaggio di programmazione VB.Net e C# vedremo come fare il download sul nostro pc, della foto che comparare come sfondo nel sito www.bing.it

Progettazione form

Si crea un nuovo progetto di tipo “Windows Application” utilizzando il linguaggio di programmazione di nostro interesse.
Dopo aver creato il progetto, aggiungiamo nella form, una casella di testo, che sarà impostata in modalità di sola lettura la quale visualizza il percorso e nome del file, due pulsanti, uno per aprire la finestra di salvataggio immagine e l’altro per il download ed un controllo label, il tutto come mostrato in figura 1.


Figura 1 - i controlli posizionati nella form

Posizioniamo i controlli come riportati nella figura precedente.
Aggiungiamo anche un controllo di tipo “SaveFileDialog”.

Stesura del codice

Facciamo doppio click sul pulsante contraddistinto con i tre puntini, quello vicino alla casella di testo.
L’evento click di tale pulsante visualizza la finestra di dialogo per il salvataggio del file, permettendo di impostare il percorso e nome del file di tipo “Jpg”.
Qui di seguito si riporta il frammento di codice per il linguaggio VB.Net e C#


 
VB.Net

Private Sub BtnPercorso_Click(sender As System.Object, e As System.EventArgs) Handles BtnPercorso.Click

        If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

            txtPercorso.Text = saveFileDialog1.FileName + ".jpg"

        End If

 

    End Sub

 

C#

private void BtnPercorso_Click(object sender, EventArgs e)

        {

            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

            {

               

                txtPercorso.Text =  saveFileDialog1.FileName + ".jpg";

 

            }

        }

 
Il codice appena illustrato è molto semplice, non fa altro che impostare la proprietà “Text” del controllo casella di testo, con il percorso e nome del file.
Ora facciamo click sul pulsante con la scritta “Download”, nell’evento click scriveremo il codice per effettuare il download dell’immagine.
Prima di eseguire il download dell’immagine, dobbiamo calcolare il percorso e nome del file che ogni giorno bing metterà on line.
L’algoritmo è molto semplice, l’immagine di sfondo, si trova nel tag “/az/hprichbg/rb/ “
Ed una volta ottenuto tale valore, dobbiamo rilevare il testo che segue fino al simbolo del singolo apice “ ‘ “ .
Il valore 16 è la somma del tag html riguardante il percorso dell’immagine, ossia “/az/hprichbg/rb/” .
Dopo aver ottenuto il percorso e nome dell’immagine del giorno non ci resta che effettuare il download dell’immagine, tramite le classi httpwebrequest, httpwebreesponse e stream.
Qui di seguito si riporta il frammento di codice.


VB.Net (Evento click)

Private Sub btnDownload_Click(sender As System.Object, e As System.EventArgs) Handles btnDownload.Click

 

        Using client As New WebClient()

            Dim htmlCode As String = client.DownloadString("http://www.bing.com/?cc=it")

            Dim indice As Int32 = htmlCode.IndexOf("/az/hprichbg/rb/")

            indice += 16

            Dim indice2 As Int32 = htmlCode.IndexOf("'", indice)

            Dim testoDaCercare As String = htmlCode.Substring(indice, indice2 - indice)

            DownloadImage("http://www.bing.com/az/hprichbg/rb/" + testoDaCercare)

 

 

        End Using

 

 

    End Sub

 

C# (Evento click)

 

private void btnDownload_Click(object sender, EventArgs e)

        {

 

          

 

 

            using (WebClient client = new WebClient())

            {

                string htmlCode = client.DownloadString("http://www.bing.com/?cc=it");

              

                Int32 indice = htmlCode.IndexOf(@"/az/hprichbg/rb/");

                indice += 16;

                Int32 indice2 = htmlCode.IndexOf("'", indice);

 

                string testodaCercare = htmlCode.Substring(indice, indice2 - indice);

 

                DownloadImage("http://www.bing.com/az/hprichbg/rb/" + testodaCercare);

                return;

 

                

            

 

               

                

            }

 

 

           

 

        }

 

VB.Net (Funzione DownloadImage)

 

Sub DownloadImage(url As String)

        If txtPercorso.Text.Trim() = "" Then

            MessageBox.Show("Selezionare un percorso e nome di file.")

            Exit Sub

        End If

        Dim httpWebRequest As HttpWebRequest = httpWebRequest.Create(url)

        Using httpwebresponse As HttpWebResponse = httpWebRequest.GetResponse()

            Using Stream As Stream = httpwebresponse.GetResponseStream()

                Dim immagine As New Bitmap(Image.FromStream(Stream))

                immagine.Save(txtPercorso.Text)

                MessageBox.Show("Download completato. Verifica in " + txtPercorso.Text + "  il file immagine.")

            End Using

 

        End Using

 

 

 

    End Sub

 

 
C# (Funzione DownloadImage)

  private void DownloadImage(string url)

        {

            if (txtPercorso.Text.Trim() == "")

            {

                MessageBox.Show("Selezionare un percorso e nome di file.");

                return;

            }

            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);

 

            using (HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse())

            {

                using (Stream stream = httpWebReponse.GetResponseStream())

                {

                    

                    Bitmap immagine = new Bitmap(Image.FromStream(stream));

                    immagine.Save(txtPercorso.Text);

                    MessageBox.Show("Download completato. Verifica in " + txtPercorso.Text  +"  il file immagine.");

                }

            }

       

        }





 Come si è visto dal precedente esempio di codice, tramite la classe webclient si ottiene il codice html della pagina, con il metodo downloadstring.
La funzione “DownloadImagine” con l’utilizzo delle classi “httpwebrequest”, “httpwebresponse”, “Stream” e “bitmap” permette di salvare l’immagine sul nostro pc.

Conclusioni

L’articolo ha illustrato la possibilità di realizzare un simpatico programma che ci permette di gestire le belle immagini che il motore di ricerca Bing offre ogni giorno ai suoi utenti.
L’articolo ha voluto avvicinare il lettore al download dei file di tipo immagine, il programma può essere ampliato rendendo ancora più interessante l’articolo.
Va fatta una precisione, che le immagini, non si possono utilizzare liberamente, questo vuol dire, che se vogliamo metterle nei nostri siti o programmi,  o per altra iniziativa (campagne marketing, comunicazione, etc) ciò non è possiibile
Tramite la parola Download è possibile scaricare il file di esempio.

sabato 13 febbraio 2016

ext.net tag html in control label

Nel caso che vogliamo utilizzare i tag "HTML" in un controllo label di Ext.Net, come per esempio il tag "br" dobbiamo utilizzare la proprietà html del controllo
qui di sguito un esempio
ext:label runat="Server" id="lblNome" html="


"/>

martedì 9 febbraio 2016

Il primo volume del ebook gratuito del Dottore dei computer

Torna con nuovi articoli e nuova veste grafica, il tecnico informatico di Milano, il famoso Dottore dei Computer, che da qualche giorno ha pubblicato un ebook gratuito, con tantissimi trucchi sul mondo tecnologico.
L'ebook, in formato pdf, si può scaricare gratuitamente dal seguente sito http://www.ildottoredeicomputer.it/2016/01/21/il-dottore-dei-computer-in-pdf-volume-1/ ed è composto da oltre 100 pagine.
Essendo un ebook gratuito, l'autore, non chiede nulla, ma chi vuole può fare una libera donazione alla Fondazione ANT, a cui l'autore di questo interessante ebook sta a cuore.
Complimenti al Dottore dei Computer, per questo manuale e per il nuovo sito.

giovedì 4 febbraio 2016

javascript set select value

Nel caso che vogliamo selezionare un valore di una casella combinata in Javascript, in ambito Html (tag html Select) tramite la proprietà value possiamo impostare la selezione.
Qui di seguito un frammento di codice.
document.getElementById('NomeCasella').value = "VALORE";

martedì 2 febbraio 2016

javascript convert date object to string json

Se ci troviamo in un pagina Aspx, e vogliamo convertire la proprietà di un oggetto, che è di tipo Date Object in string, dobbiamo convertire il tutto numero e poi data.
In ambito Json, il valore che viene visualizzato è /Date(numero)/ il quale non può essere convertito in data.
Dobbiamo prendere il valore numerico e convertirlo in data.
Qui di seguito un frammento di codice di esempio.
var MiaDAta = new Date(parseInt(DataDaJson.substr(6)));

lunedì 1 febbraio 2016

.Net rilevare le immagini in un file Pdf C# e VB.Net

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-estrapolare-immagini-da-un-file-pdf-_1437.aspx


A volte può capitare che dobbiamo estrapolare delle immagini da un file PDF, in questo articolo vedremo tramite il linguaggio di programmazione Visual Basic .Net e C#, come rilevare e salvare sul proprio pc file di tipo jpeg, contenente l’immagine che si trova nel file PDF.
Per la gestione dei file PDF, utilizzeremo la libreria gratuita ITextSharp che permette un ottima gestione dei file PDF.
Si crea un progetto di tipo “Windows Application” tramite il linguaggio di vostro interesse, a questo punto nella form inseriamo un pulsante, nell’evento click del pulsante andremo ad elaborare il file PDF.
Aggiungiamo al progetto il riferimento alla libreria ItextSharp.
Stesura del codice
Passiamo in visualizzazione codice, in modo che possiamo elaborare il file “Pdf”.
Aggiungiamo i riferimenti per la gestione dei file Pdf ed immagine.



VB.Net

Imports iTextSharp

Imports iTextSharp.text.pdf

Imports System.IO

Imports System.Drawing.Imaging

Imports iTextSharp.text.pdf.parser

 

 

C#

using iTextSharp;

using iTextSharp.text.pdf;

using System.IO;

using System.Drawing.Imaging;

using iTextSharp.text.pdf.parser;


Nell’evento click scriviamo il nome della funzione nel quale si trova il codice per l’elaborazione del file.
Qui di seguito il frammento di codice.



VB.Net

Private Sub BtnEstrai_Click(sender As System.Object, e As System.EventArgs) Handles BtnEstrai.Click

        EstraiImmagine("E:\MioFilePDF.pdf")

    End Sub

 

 

C#

private void BtnEstrai_Click(object sender, EventArgs e)

        {

            EstraiImmagine(@"E:\MioFilePDF.pdf");

 

        }



Naturalmente va cambiato il percorso e nome del file che si vuole elaborare.
La funzione “EstraiImmagine” avrà lo scopo di elaborare il file PDF, tramite le classi “PdfDictionary”, “PdfReader” in particolare rilevare la risorsa nella prima pagina che viene indicato nel metodo “GetPageN”.
Tramite la classe “ImageRenderInfo” otteniamo il riferimento all’immagine, o meglio l’oggetto che possiamo salvare nel nostro pc.
Qui di seguito le suddette operazioni per entrambi i linguaggi.




VB.Net

Private Sub EstraiImmagine(percorsoFilePdf As String)

        Try

            Dim FilePdf As PdfReader = New PdfReader(percorsoFilePdf)

            'Leggo la prima pagina

            Dim pagina As PdfDictionary = FilePdf.GetPageN(1)

            'estrapolo gli oggetti

            Dim risorsa As PdfDictionary = CType(PdfReader.GetPdfObject(pagina.Get(PdfName.RESOURCES)), PdfDictionary)

 

            Dim oggetti As PdfDictionary = CType(PdfReader.GetPdfObject(risorsa.Get(PdfName.XOBJECT)), PdfDictionary)

 

            Dim NomeFile As String = "immagine"

            'Ciclo per ogni immagine ed estrapolo tutte le immagini della prima pagina

            Dim contatore As Integer = 1

 

            For Each nome As PdfName In oggetti.Keys

 

                Dim Immagine As PdfObject = oggetti.Get(nome)

                If Immagine.IsIndirect() Then

 

                    Dim pdfDictionary As PdfDictionary = CType(PdfReader.GetPdfObject(Immagine), PdfDictionary)

 

                    Dim width As String = pdfDictionary.Get(PdfName.WIDTH).ToString()

                    Dim height As String = pdfDictionary.Get(PdfName.HEIGHT).ToString()

                    Dim ImmagineOttenuta As ImageRenderInfo = ImageRenderInfo.CreateForXObject(New Matrix(Single.Parse(width), Single.Parse(height)),

                        CType(Immagine, PRIndirectReference), pdfDictionary)

                    SalvaImmagine(ImmagineOttenuta, NomeFile & contatore & ".jpeg")

                    contatore += 1

                End If

 

 

            Next

 

 

 

 

 

        Catch ex As Exception

            MessageBox.Show("Errore: " + ex.Message)

        End Try

    End Sub

 

C#

   private void EstraiImmagine(string percorsoFilePdf)

        {

          

            try

            {

 

                

                PdfReader FilePdf = new PdfReader(percorsoFilePdf);

                //Leggo la prima pagina

                PdfDictionary pagina = FilePdf.GetPageN(1);

                //estrapolo gli oggetti

                PdfDictionary risorsa = (PdfDictionary)PdfReader.GetPdfObject(pagina.Get(PdfName.RESOURCES));

                PdfDictionary oggetti = (PdfDictionary)PdfReader.GetPdfObject(risorsa.Get(PdfName.XOBJECT));

                string NomeFile = "immagine";

                //Ciclo per ogni immagine ed estrapolo tutte le immagini della prima pagina

                int contatore = 1;

                foreach (PdfName nome in oggetti.Keys)

                {

                    

                        PdfObject Immagine = oggetti.Get(nome);

                        if (Immagine.IsIndirect())

                        {

                            PdfDictionary pdfDictionary = (PdfDictionary)PdfReader.GetPdfObject(Immagine);

                            string width = pdfDictionary.Get(PdfName.WIDTH).ToString();

                            string height = pdfDictionary.Get(PdfName.HEIGHT).ToString();

                            ImageRenderInfo ImmagineOttenuta = ImageRenderInfo.CreateForXObject(new Matrix(float.Parse(width), float.Parse(height)),

                                (PRIndirectReference)Immagine, pdfDictionary);

                            SalvaImmagine(ImmagineOttenuta, NomeFile + contatore + ".jpeg");

                            contatore += 1;

                        }

                }

 

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message);

            }

 

            

        }





Siamo giunti alla conclusione del nostro articolo, dobbiamo scrivere il metodo che permette di salvare sul nostro pc l’immagine che abbiamo rilevato dal file Pdf.
Tramite la classe PdfimageObject potremmo gestire l’immagine che abbiamo rilevato dal file PDF, mentre la classe MemeryStream ci permette di trasformare l’oggetto in stream di dati che tramite la classe bitmap possiamo salvare nel nostro pc con il metodo “Save”.
Qui di seguito il frammento di codice di tale operazioni






Vb.Net

Sub SalvaImmagine(renderInfo As ImageRenderInfo, NomeFileDaSalvare As String)

 

        Dim immagineDaPdf As PdfImageObject = renderInfo.GetImage()

        Using immagineDaSalvare As Image = immagineDaPdf.GetDrawingImage()

 

            If immagineDaSalvare IsNot Nothing Then

                Using ms As New MemoryStream()

                    immagineDaSalvare.Save(ms, ImageFormat.Jpeg)

                    Dim Bitmap As Bitmap = New Bitmap(immagineDaSalvare)

                    Bitmap.Save("E:\\" + NomeFileDaSalvare)

                End Using

 

            End If

        End Using

 

 

    End Sub

 

 

C#

private void SalvaImmagine(ImageRenderInfo renderInfo, string NomeFileDaSalvare)

        {

            PdfImageObject immagineDaPdf = renderInfo.GetImage();

            using (Image immagineDaSalvare = immagineDaPdf.GetDrawingImage())

            {

                if (immagineDaSalvare != null)

                {

                    using (MemoryStream ms = new MemoryStream())

                    {

                        immagineDaSalvare.Save(ms, ImageFormat.Jpeg);

                        Bitmap bitMap = new Bitmap(immagineDaSalvare);

                        bitMap.Save("E:\\" + NomeFileDaSalvare);

 

                    }

                }

 

 

                

            }

       

        }






Conclusioni
In questo articolo abbiamo visto come con poche righe di codice possiamo estrae le informazioni contenute in un file Pdf, sul nostro pc. L’articolo può divenire anche una base per la realizzazione di un Software per gestire i file Pdf.
Tramite la parola “Download” è possibile scaricare il file di questo articolo.