C# convertire una pagina web in un file Pdf

Articolo che fornisce una tecnica per trasformare i siti in file pdf.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come trasformare una pagina web, ossia codice html in un file Pdf, oppure dato un certo indirizzo web convertirlo in un file PDF.
Utilizzeremo il componente gratuito “Select.html.PDF” qui https://www.nuget.org/packages/Select.HtmlToPdf/ il sito, mentre qui https://selectpdf.com/community-edition/ il sito riguardante il componente gratuito.
 

Creazione del progetto

Si crea un nuovo progetto di tipo Web, ricordando che il codice è utilizzabile anche per progetti di tipo windows application.
Dopo aver creato un progetto di tipo Asp.Net Web Form, o comunque sempre web, aggiungiamo un pulsante, con il quale andremo ed esportare in formato pdf, la home page del sito “www.iprogrammatori.it “.
Prima di passare a scrivere il codice, dobbiamo aggiungere tra i riferimenti il componente gratuito per l’esportazione di pagine web in formato PDF.
Dalla finestra Nuget (strumenti->Gestione Pacchetti Nuget->Console di Gestione pacchetti) scrivere la seguente istruzione.


Install-Package Select.HtmlToPdf -Version 20.1.0


Nel momento in cui si sta scrivendo l’articolo l’ultima versione è la 20.1.0


Stesura del codice

Ora non ci resta che scrivere il codice per trasformare la pagina di un sito in un file pdf.
Nel nostro caso si crea una file pdf, dalla home page del portale www.iprogrammatori.it
Facciamo doppio click sul pulsante in questo modo verrà visualizzata la modalità codice dell’evento click del pulsante.
Le classi che utilizzeremo sono HtmlToPdf per convertire codice Html o un sito, e la classe PdfDocument per la generazione dei file in formato PDf.
Qui di seguito il frammento di codice che dato un sito crea un file pdf della pagina (in questo caso home page) del sito che viene passato.

C#
protected void BtnEsporta_Click(object sender, EventArgs e)
{
SelectPdf.HtmlToPdf sitoDaTrasformare = new SelectPdf.HtmlToPdf();
SelectPdf.PdfDocument filePdf = sitoDaTrasformare.ConvertUrl("www.iprogrammatori.it");
//filePdf.Save(@"C:\Varie\test.pdf");
filePdf.Save(Response, false, "test.pdf");
filePdf.Close();
}

Come si è visto dal precedente codice tramite il metodo “ConvertURl” della classe HtmlToPdf si converte la home page del sito iprogrammatori in un file pdf passandolo ad un oggetto di tipo PdfDocumenti.
Tramite il metodo “Save” della classe PdfDocument, possiamo salvarlo in un percorso, oppure effettuare il download del file dal proprio browser.

Ritorniamo in visualizza grafica ed aggiungiamo un altro pulsante.
Vedremo come trasformare il codice html della propria pagina, in un file pdf.
Facciamo doppio click sul pulsante appena inserito nella pagina in questo modo si passa in visualizzazione codice nell’evento click del pulsante.

Prima di scrivere il codice dobbiamo inserire lo spazio dei nomi per le classi che devono gestire il codice html.
In particolare la classe webclient per estrapolare il codice html e la classe econding per la gestione del testo.
Qui di seguito le dichiarazioni dello spazio dei nomi.

using System.Text;
using System.Net;

Ritorniamo nell’evento click del pulsante e scriviamo il codice che permette di estrapolare il markup html della pagina in cui sta girando il nostro sito e di convertire il tutto in un file pdf, prendendo spunto dal codice precedente per le classi per la gestione della conversione in file pdf.
Qui di seguito il codice completo per l’evento click del pulsante.

C#
protected void BtnDaCodiceHtml_Click(object sender, EventArgs e)
{
WebClient ClientWeb = new WebClient();
string CodiceHtml = "";
byte[] requestHTML;
string PaginaCorrente = Request.Url.ToString();
UTF8Encoding utf8 = new UTF8Encoding();
requestHTML = ClientWeb.DownloadData(PaginaCorrente);
CodiceHtml = utf8.GetString(requestHTML);
SelectPdf.HtmlToPdf CodiceHtmlDaConvertire = new SelectPdf.HtmlToPdf();
SelectPdf.PdfDocument filePdf = CodiceHtmlDaConvertire.ConvertHtmlString(CodiceHtml, PaginaCorrente);
filePdf.Save(Response, false, "test.pdf");
filePdf.Close();
}

Con la classe Webclient, ricaviamo il codice html della pagina, la quale viene utilizzata nel metodo ConvertHtmlString, con un secondo parametro riguardante il sito, in modo che rileva anche i fogli di stili e le relative immagini.


Conclusioni


L’articolo ha voluto fornire al lettore l’introduzione di questo componente gratuito per trasformare pagine e siti web in file pdf. Le funzionalità di questo componente offre al programmatore diverse scenari per lavorare anche su altri aspetti del file, come la larghezza, pagine ed altro ancora. Un componente flessibile e che offre in maniera semplice ed agevolata la scrittura del codice su operazioni anche complesse.