C# creazione di un file pdf con le annotazioni tramite PdfSharp

Articolo che fornisce un esempio concreto sulla gestione dei file pdf con l'aggiunta delle annotazioni tramite libreria PdfSharp.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo viene illustrata una tecnica di come creare un file pdf, con l’aggiunta di annotazioni per fornire all’utente che aprirà il file, informazioni sul testo ed un’immagine ad indicare il documento finale, il tutto come mostrato in figura 1.

Figura 1 – La creazione delle note

Figura 1 – La creazione delle note

Come illustrato nell’articolo introduttivo, qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-creazione-di-un-file-pdf-tramite-la-libreri_1822.aspx utilizzeremo la  libreria gratuita PdfSharp che può essere utilizzata anche per progetti commerciali. 
Può capitare di voler aggiungere nella creazione o gestione dei file pdf, delle note, tramite alcune classi della libreria PdfSharp vedremo come applicare tali aspetti in un nuovo file.
Il codice che utilizzeremo è per un progetto di tipo “Windows Application” ma è possibile applicarlo anche in ambito web, con la tecnologia Asp.Net.

Creazione del progetto


Si crea un nuovo progetto tramite l’ambiente di sviluppo “Visual Studio 2022 community”, selezioniamo come tipo di progetto “App Windows Form”, impostando un nome al progetto e selezionando come versione del .Net l’ultima, nel momento in cui stiamo scrivendo la versione 7, oppure apriamo il precedente progetto. 
Aggiungiamo al progetto la libreria “PdfSharp” nel caso che è un nuovo progetto, tramite “Nuget”, dopo aver aggiunto tale libreria, aggiungiamo un pulsante, il quale scriveremo il codice per la creazione del file “Pdf” con le annotazioni.
Il controllo di tipo pulsante, avrà la proprietà “text” con il valore “Annotazione” e la proprietà “Name” con il valore “BtnAnnotazione”.
Terminata la creazione del progetto ed aver impostato il controllo non resta che scrivere il codice per creare il file pdf.

Stesura del codice


Dopo aver aggiunto il riferimento alla libreria pdfsharp, dobbiamo aggiungere i vari spazio dei nomi (namespace) per utilizzare le varie classi della libreria, passiamo in visualizzazione codice, ed in alto sopra ad ogni dichiarazione, inseriamo lo spazio dei nomi.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#
using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.Annotations;
using PdfSharp.Pdf.IO;
using System.Diagnostics;
using System.Text;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;


Dopo aver aggiunto lo spazio dei nomi, passiamo in visualizzazione grafica, e facciamo doppio click sul pulsante in modo da passare in visualizzazione codice dell’evento click del pulsante.
In quest’evento scriveremo il codice per la creazione del file pdf con le annotazioni, utilizzando le classi messe a disposizione dal componente, in particolare le classi “PdfTextAnnotation” e “PdfRubberStampAnnotation”.
Con la classe “PdfTextAnnotation” impostando alcune proprietà, come il titolo, il testo, ed altro permettendo di gestire le informazioni che saranno successivamente visibili nel file pdf tra le annotazioni,  con l’oggetto creato, impostiamo tramite la classe “Xrect” l’area di formattazione dell’annotazione. Una volta impostato l’oggetto di tipo “PdfTextAnnotation” l’aggiungiamo alla proprietà “Annotations” dell’oggetto di tipo “PdfDocument”, in questo modo si creano le annotazioni nel file pdf, mentre con la classe “PdfRubberStampAnnotation”,  impostiamo alcune proprietà quali “flags” e “icon” che permettono rispettivamente di fissare nella pagina l’immagine scritta della proprietà “Icon”, che nel nostro caso riguarda l’immagina con la dicitura “Finale”.

Oltre alla classe “PdfDocument” per la creazione e gestione dei file, come visto nell’articolo introduttivo a questo componente utilizzeremo la classe “Font” per la gestione dei caratteri e la classe “PdfPage” per gestire le singole pagine.

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

C#
private void BtnAnnotazione_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);
               //Oggetto per le annotazoni
               PdfTextAnnotation pdfAnnotazioni = new PdfTextAnnotation()
               {
                   Title = "Titolo annnotazione",
                   Subject = "Oggetto annotazione",
                   Contents = "Contenuto dell'annotazione ossia il testo. \r Testo in seconda linea",
                   Icon = PdfTextAnnotationIcon.Note
               };
               XFont font = new XFont("Verdana", 12, XFontStyle.BoldItalic);
               XgfxScrittura.DrawString("Testo dove andrà inserita l'annotazione.", font, XBrushes.Black, 30, 50, XStringFormats.Default);
               //Definisco il rettangolo per l'annotazione
               XRect rect = XgfxScrittura.Transformer.WorldToDefaultPage(new XRect(new XPoint(30, 60), new XSize(30, 30)));
               pdfAnnotazioni.Rectangle = new PdfRectangle(rect);
               //Aggiungo l'annotazione
               pagina.Annotations.Add(pdfAnnotazioni);
               //Aggiungo altra annotazione
               pdfAnnotazioni = new PdfTextAnnotation()
               {
                   Title = "Seconda annotazione.",
                   Subject = "Esempio secondo annotazione aperta.",
                   Contents = "Testo presente nell'annotazione.",
                   Icon = PdfTextAnnotationIcon.Help,
                   Color = XColors.Aquamarine,
                   Opacity = 0.7,
                   Open = true
               };
               XgfxScrittura.DrawString("Testo dove andrà inserita la seconda annotazione.", font, XBrushes.Black, 30, 140, XStringFormats.Default);
               //Definisco il rettangolo per l'annotazione
               rect = XgfxScrittura.Transformer.WorldToDefaultPage(new XRect(new XPoint(30, 150), new XSize(30, 30)));
               pdfAnnotazioni.Rectangle = new PdfRectangle(rect);
               //Aggiungo l'annotazione
               pagina.Annotations.Add(pdfAnnotazioni);
               //Aggiungo una icona/scritta 
               PdfRubberStampAnnotation pulsanteAnnotazioni = new PdfRubberStampAnnotation()
               {
                   Flags = PdfAnnotationFlags.Print,
                   Icon = PdfRubberStampAnnotationIcon.Final
               };
               rect = XgfxScrittura.Transformer.WorldToDefaultPage(new XRect(new XPoint(100, 400), new XSize(350, 150)));
               pulsanteAnnotazioni.Rectangle = new PdfRectangle(rect);
               pagina.Annotations.Add(pulsanteAnnotazioni);
               //Salvo il documento
               string filename = "C:\\Varie\\FilePdfSharpAnnotazione.pdf";
               documentoPdf.Save(filename);
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }

Conclusioni 


L’articolo ha voluto fornire un utilizzo particolare della libreria gratuita “PdfSharp” in particolare per la creazione delle annotazioni da aggiungere nel file pdf, fornendo informazioni aggiuntive su determinate porzioni di testo.
Tramite le varie classi della libreria è possibile aggiungere ai propri progetti funzionalità sulla gestione dei file, fornendo al programmatore uno sviluppo applicativo agevolato e rapido.