Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-creazione-di-un-file-pdf-con-le-annotazioni_1825.aspx
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
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.