C# utilizzo della libreria QuestPDF per alcune funzionalità

Articolo che fornisce diversi esempi di codice sull'utilizzo della libreria gratuita QuestPDF per le operazioni più comuni sui file Pdf.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo alcune funzionalità della libreria gratuita QuestPDF, di cui in un precedente articolo, qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-la-creazione-dei-pdf-con-il-componente-ques_1823.aspx , ne avevamo scritto le potenzialità ma soprattutto introducendo il lettore a questo componente per la creazione e gestione dei file pdf.
La libreria che può essere utilizzata anche per progetti commerciali offre funzionalità molto interessanti e soprattutto semplifica lo sviluppo di applicazioni web o desktop nel quale si deve fare uso dei file Pdf.
In questo articolo, vedremo alcuni aspetti grafici e di formattazione che possiamo applicare durante la creazione dei file pdf, come per esempio il grassetto, il colore, l’allineamento al centro, l’inserimento di immagini ed altro ancora, il tutto come mostrato in figura 1.

Figura 1 – Il risultato finale nella creazione del file pdf.

Figura 1 – Il risultato finale nella creazione del file pdf.

L’esempio utilizzato in questo articolo è per ambiente Desktop, ma può essere replicato anche per l’ambiente web, con l’ambiente di sviluppo Visual Studio 2022 Community e linguaggio di programmazione C# con la versione .Net 7, attualmente l’ultima versione in questo momento in cui si sta scrivendo l’articolo.

Creazione del progetto


Si crea un nuovo progetto di tipo “App Windows”, assegnando un nome di proprio interesse al progetto e selezionando come versione del Framework la numero 7.

Dopo aver creato il progetto, inserire un pulsante nella form, impostando la proprietà “Name” con il valore “BtnCrea” e la proprietà “Text” con il valore “Crea”, terminata la fase di progettazione della form non resta che aggiungere il riferimento alla libreria QuestPdf, tramite Nuget (strumenti->Gestione Pacchettu Nuget->Gestisci pacchetti Nuget per la soluzione…) , in questo modo si aprirà la schermata per l’installazione e gestione dei pacchetti. Nella casella inserire di ricerca per la pagina “Sfoglia”, aggiungere il valore “QuestPDF” ed aggiungerlo.

La parte relativa alla creazione e predisposizione del progetto è terminata, non resta che scrivere il codice.

Stesura del codice


Passiamo in visualizzazione codice, ed inseriamo lo spazio dei nomi del componente QuestPdf, in questo modo avremo a disposizione le varie classi per gestire i file pdf.
Sopra ad ogni istruzione di codice inseriamo lo spazio dei nomi (namespace) per la libreria aggiunta al progetto, di seguito il frammento di codice delle suddette operazioni.

C#
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

A questo punto passiamo in visualizzazione grafica, e facciamo doppio click sul pulsante aggiunto in precedenza, in modo che si passa in visualizzazione codice dell’evento click dello stesso.
Nel codice, dobbiamo utilizzare la classe “Document” che tramite il metodo “Create” crea un file pdf, tra le varie proprietà e classi, utilizzeremo la classe “Column” con il quale inseriremo i vari esempi di codice.
Per Esempio, utilizzando il metodo “FontColor” della classe “TextSpanDescriptor” è possibile impostare il colore del testo, oppure tramite il metodo “Underline” il sottolineato.
Di seguito il frammento di codice di tali proprietà.

C#
x.Item().Text("Prova testo").FontColor("#00FF00").FontSize(26);
                           //Altra formattazione
                           x.Item().Text(text =>
                            {
                                text.Span("Testo non formattato ");
                                text.Span("Testo Sottolineato.").Underline();
                                text.Line("Linea").FontColor("#00FF00");
                            });

Altri metodi con il quale possiamo impostare il testo è quello relativo allo sfondo dietro il testo, che avviene tramite il metodo “BackgroundColor” oppure il grassetto tramite il “Bold” o l’allineamento tramite “AlignCenter”.
Di seguito il frammento di codice delle suddette operazioni.

C#
x.Item().Text(text =>
                           {
                               text.Span("Altro Testo non formattato ").BackgroundColor(Colors.Grey.Medium);
                               text.Span("Testo In grassesso.").Bold();
                               text.AlignCenter();
                               text.Span("Linea").FontColor(Colors.LightGreen.Medium);
                           });

Tramite il metodo “Hyperlink” è possibile impostare all’interno del file Pdf un testo che al click apre un sito, mentre il metodo “EmptyLine” crea una riga vuota. Se invece vogliamo inserire delle immagini, dobbiamo utilizzare il metodo “Image” di “Item” per aggiungere file immagini o passando il percorso e nome del file in cui si trova l’immagine, oppure tramite stream data dell’immagine.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#
//Collegamento
                           x.Item().Text(text =>
                           {
                               text.Hyperlink("Sito Iprogrammatori", "https://www.iprogrammatori.it/");
                           });
                           //Altro
                           x.Item().Text(text =>
                           {
                               text.Line("Testo");
                               text.Line(" Testo 2");
                               text.EmptyLine();
                           });
                           x.Item().Image("C:\\Varie\\logo-iprogrammatori.png", ImageScaling.Resize);
                           byte[] LogoByteArray = File.ReadAllBytes("C:\\Varie\\logo-iprogrammatori.png");
                           x.Item().Image(LogoByteArray);

A titolo semplificativo si riporta il codice completo dell’evento click del pulsante, con il quale si crea il file pdf impostando le varie formattazioni, e soprattutto l’utilizzo di alcuni metodi.

C#
private void BtnCrea_Click(object sender, EventArgs e)
       {
           Document.Create(container =>
           {
               container.Page(page =>
               {
                   page.Size(PageSizes.A4);
                   page.Margin(2, Unit.Centimetre);
                   page.PageColor(Colors.White);
                   page.DefaultTextStyle(x => x.FontSize(20));
                   page.Header()
                       .Text("Esempio Quest PDF!")
                       .SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);
                   page.Content()
                       .PaddingVertical(1, Unit.Centimetre)
                       .Column(x =>
                       {
                           x.Spacing(20);
                           x.Item().Text("Prova testo").FontColor("#00FF00").FontSize(26);
                           //Altra formattazione
                           x.Item().Text(text =>
                            {
                                text.Span("Testo non formattato ");
                                text.Span("Testo Sottolineato.").Underline();
                                text.Line("Linea").FontColor("#00FF00");
                            });
                           x.Item().Text(text =>
                           {
                               text.Span("Altro Testo non formattato ").BackgroundColor(Colors.Grey.Medium);
                               text.Span("Testo In grassesso.").Bold();
                               text.AlignCenter();
                               text.Span("Linea").FontColor(Colors.LightGreen.Medium);
                           });
                           //Collegamento
                           x.Item().Text(text =>
                           {
                               text.Hyperlink("Sito Iprogrammatori", "https://www.iprogrammatori.it/");
                           });
                           //Altro
                           x.Item().Text(text =>
                           {
                               text.Line("Testo");
                               text.Line(" Testo 2");
                               text.EmptyLine();
                           });
                           x.Item().Image("C:\\Varie\\logo-iprogrammatori.png", ImageScaling.Resize);
                           byte[] LogoByteArray = File.ReadAllBytes("C:\\Varie\\logo-iprogrammatori.png");
                           x.Item().Image(LogoByteArray);
                       });
                   page.Footer()
                       .AlignCenter()
                       .Text(x =>
                       {
                           x.Span("Pagina ");
                           x.CurrentPageNumber();
                       });
               });
           }).GeneratePdf("Nuovo File.pdf");
       }

Conclusioni


L’articolo ha voluto fornire al lettore alcuni aspetti interessanti di questa libreria gratuita, ma soprattutto alcune funzionalità più comuni da utilizzare nella gestione dei file Pdf.
Sempre più progetti in ambito web o windows application, richiedono la gestione o meglio la creazione dei file pdf, e questa libreria può tornare molto utile.
La libreria ha talmente funzionalità e flessibilità che facilita la stesura del codice ma soprattutto riesce a coprire tutte le situazioni in cui ci si imbatte nel creare e gestire i file pdf.
Tante le funzionalità che mette a disposizione, permettendo in questo modo di generare o gestire file pdf, anche di un certo livello.