domenica 30 aprile 2023

C# componente gratuito per la creazione dei video giochi - Flecs

 


Il componente Flecs, qui  Flecs: Flecs il sito, permette di aggiungere allo sviluppo di video giochi, alcuni aspetti ed effetti messi a disposizione da questa libreria gratuita.

Il sito è in lingua inglese, ma è facile da utilizzare ed è presente una guida per l'utilizzo del componente stesso.

Per maggiori informazioni ed altro visitate il sito indicato.


sabato 29 aprile 2023

Download gioco Poker Club

 


Un gioco con una grafica molto accattivante che far sembrare di stare dentro al gioco, parliamo di Poker Club, un video gioco per adulti sul famoso gioco delle carte del Poker.

Il gioco in lingua italiana e per sistemi operativi Windows, è disponibile gratuitamente fino al 4 maggio 2023 dopo tale data il download sarà a pagamento, per il download e maggiori informazioni visitate il seguente sito Poker Club | Acquistalo e scaricalo subito sull'Epic Games Store

MAUI liberare la memoria

Il frammento di codice qui di seguito permette di liberare la memoria degli appunti in varie piattaforme tramite il framework MAUI.

 Clipboard.Default.SetTextAsync(null);


venerdì 28 aprile 2023

Download gioco Breathedge

 



Dal seguente sito Breathedge (epicgames.com) è possibile scaricare un video gioco di avventure spaziali, per sistemi operativi Windows.

Fino al 4 maggio 2023 il download sarà gratuito dopo tale data, si potrà scaricare a pagamento.

Per maggiori informazioni e download visitate il sito indicato.


Microsoft Edge intelligenza artificiale che risponde alle tue domande

 


Interessante la nuova funzionalità del browser Microsoft Edge, che permette di dare risposte alle domande che si pongono.

Tramite il logo di Bing, situato sulla destra  sopra la barra, quella con la forma della lettera "B", si apre un pannellino con il quale fare domande.

Dopo aver fatto la domanda nella casella di testo, il sistema di intelligenza artificiale fornirà una possibile risposta oppure ulteriore richieste o indicazioni.

Una funzionalità molto interessante e soprattutto ben fatta.

giovedì 27 aprile 2023

Download gratuito programma di modifica immagine ImageMagick

 


Il programma ImageMagick, qui https://imagemagick.org/ il sito ufficiale, è un software gratuito ed open source, con il quale si possono effettuare modifiche ai file immagini o creare gif, permettendo di modificare immagini o manipolarli.

Il sito è in lingua inglese.

Per maggiori informazioni e download visitate il sito indicato.


mercoledì 26 aprile 2023

Download gioco Never Alone (Kisima Ingitchuna)

 


Un nuovo gioco di avventura con una grafica accattivante ambientato in uno scenario di bufera eterna, parliamo di neverl Alone, in lingua italiana e per sistemi operativi Windows.

Fino al 27 aprile 2023 il download sarà gratuito dopo tale data, a pagamento.

Per maggiori informazioni e download visitate il seguente sito https://store.epicgames.com/it/p/never-alone-kisima-ingitchuna

Download gioco Beyond Blue

 



Fino a domani, 27 aprile 2023, si potrà scaricare gratuitamente il gioco di avventure marine Beyond Blue, in lingua italiana e per sistemi operativi Windows.

Fino a domani il download è gratuito, dopo sarà a pagamento, per maggiori informazioni e download visitate il seguente sito https://store.epicgames.com/it/p/beyond-blue

Download immagini gratuite tilda

 




Il sito https://tilda.cc/free-icons/ offre la possibilità di scaricare oltre 700 immagini di tipo svg, senza registrazione e senza lasciare email, da utilizzare nei propri progetti.

Se le utilizzate nelle proprie applicazioni o siti, è richiesto l'attribuzione di tale utilizzo.

Per maggiori informazioni e download visitate il sito indicato.


martedì 25 aprile 2023

Programma gratuito di desktop remoto rustdesk

 


RustDesk è un programma gratuito ed open source, in lingua italiana per la gestione del desktop remoto.

Il programma è un'alternativa dei vari programmi di assistenza remota in commercio, con il vantaggio di essere open source.

Anche se il sito è in lingua inglese, il programma è in lingua italiana.

Sono presenti varie versioni, sia il pacchetto d'installazione per i vari sistemi operativi e sia la versione portatile, che non richiede nessuna installazione.

Per maggiori informazioni e download visitate il seguente sito https://rustdesk.com/

lunedì 24 aprile 2023

togliere la ricerca nel riquadro laterale chrome

 


In alcune versioni o aggiornamenti del browser Chrome, può capitare che se effettuiamo la ricerca tramite il menu di scelta rapida (tasto destro) sul testo presente in un sito, visualizza nel pannello di destra o sinistra, i risultati della ricerca.

Per togliere questa opzione, occorre digitare nella barra degli indirizzi il seguente comando:


chrome://flags/#side-panel


Nella finestra che verrà aperta, selezionare la voce "Search web in side panel"  e fare click sul pulsante di destra ed impostare il valore "disabled", il tutto come mostrato nell'immagine di seguito.




domenica 23 aprile 2023

Portale per il download gratuito dei sfondi per pc

 


Un sito che fornisce numerosi sfondi per pc da scaricare gratuitamente.

Il sito https://www.wallpaperflare.com/ in lingua inglese ma facilmente utilizzabile, permette di visionare gli ultimi sfondi pubblicati oppure effettuare la ricerca per determinati temi.

Un sito che non richiede ne registrazioni e ne indirizzo email.

 

sabato 22 aprile 2023

Processing of the LINQ expression 'DbSet by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.

Durante l'esecuzione del codice, può capire che una query linq to Entity Framework Core, generi un eccezione del tipo 

"Processing of the LINQ expression 'DbSet< ..... ' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information." dove viene riporta la query con l'errore.
Questo può verificarsi per una serie di sotto query.
Una delle possibili soluzioni è quello di utilizzare come risultato un generico e non un Iqueryable e precedere prima della condizione Where, il Tolist.
Di seguito si riporta un esempio di prima, con l'errore e dopo senza errore.


Per esempio da così

IQueryable<NomeClasse> listaRecord= from u in DbContenx.TabellaOrVista.Where......(con subquery e condizioni)

Diventa così

 var risultato = from u in DbContenx.TabellaOrVista.ToList().Where(con subquery e condizioni)

venerdì 21 aprile 2023

sito con vari strumenti online

Il seguente sito https://pinetools.com/ offre la possibilità di utilizzare diversi strumenti online per eseguire varie operazioni, gestione delle immagini, dei file, dei video, e tanti altri.
Il sito è in lingua inglese ma facilmente utilizzabile e la navigazione è semplificata tramite le varie categorie.

giovedì 20 aprile 2023

System.MissingMethodException: 'Method not found: 'Void Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.set_AllowAreas(Boolean)'.

 


Quando si sviluppano applicazioni Asp.Net Core con Azure può verificarsi il seguente messaggio di errore "System.MissingMethodException: 'Method not found: 'Void Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.set_AllowAreas(Boolean)'." questo perchè la versione del pacchetto "Microsoft.AspNetCore.Authentication.AzureAD.UI" non è aggiornato con la versione del Framework.

Aggiornare con l'ultima versione tramite Nuget, e rieseguire la propria applicazione.


mercoledì 19 aprile 2023

EndpointRoutingMiddleware matches endpoints setup by EndpointMiddleware and so must be added to the request execution pipeline before EndpointMiddleware. Please add EndpointRoutingMiddleware by calling 'IApplicationBuilder.UseRouting' inside the call to 'Configure(...)' in the application startup code

Durante lo sviluppo softwtare con la tecnologia Asp.Net MVC Core, può verificarsi l'errore :

"EndpointRoutingMiddleware matches endpoints setup by EndpointMiddleware and so must be added to the request execution pipeline before EndpointMiddleware. Please add EndpointRoutingMiddleware by calling 'IApplicationBuilder.UseRouting' inside the call to 'Configure(...)' in the application startup code",

questo perchè manca probabilmente la chiamata al metodo "UseRouting".
Nell'evento "Configure" inserire la chiamata al metodo "UseRouting"  prima dell'istruzione " app.UseEndpoints(endpoints =>......" : 


app.UseRouting();

app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {.......

martedì 18 aprile 2023

Email gratuita crittografata proton

 



Se cercate un indirizzo di posta elettronica protetto, il sito Proto, visibile qui https://proton.me/it/mail offre la possibilità di avere un indirizzo di posta elettronica crittografato.

Questi tipi di indirizzi email, proteggono la privacy.

Il sito è in lingua italiana e fornisce anche i vari piani tariffari, per maggiori informazioni e registrazione visitate il sito indicato.


lunedì 17 aprile 2023

Download gioco Second Extinction

 


Un gioco di combattimento contro i dinosauri, con una grafica molto bella ed ottima giocabilità, questo è il gioco Second Extinction.

Il gioco per sistemi operativi Windows, si può scaricare gratuitamente entro il 20 aprile 2023, dopo tale data, il download sarà a pagamento.

Per il download e maggiori informazioni visitate il seguente sito Second Extinction™ | Acquistalo e scaricalo subito sull'Epic Games Store

could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information

 


Durante le esecuzioni di query tramite Linq, può capitare che venga sollevata l'eccezione, del tipo "could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information"

Per evitare che si verifica questa eccezione, occorre utilizzare il metodo "ToList" o "AsEnumerable" prima di un raggruppamento oppure dopo se è presente ulteriore select, nel caso che ci troviamo in select e groupBy annidate.

L'utilizzo di "ToList" eviterà questa eccezione.



domenica 16 aprile 2023

Download gioco MORDHAU

 


Un gioco per un pubblico adulto quello disponibile gratuitamente in questi giorni sulla piattaforma Epic.

Il gioco Mordhau, con una grafica molto accattivante, è di combattimento, per sistemi operativi Windows.

Fino al 20 aprile 2023 si potrà scaricare gratuitamente, dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito MORDHAU | Acquistalo e scaricalo subito sull'Epic Games Store

C# gestione dei file pdf con pdfsharp per unire file e proteggerli

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-gestione-dei-file-pdf-con-pdfsharp-per-unir_1826.aspx



In questo articolo vedremo come utilizzare la libreria PdfSharp per gestire i file di tipo “Pdf”.  in particolar modo vedremo come unire due file pdf in uno solo, proteggerli con Password e togliere la password, il tutto con il linguaggio di programmazione C# e l’ambiente di sviluppo “Visual Studio 2022 Community” con versione del Framework 7.
Il progetto sarà di tipo “Windows Application”, ma il codice si potrà utilizzare anche per progetti di tipo web.


Creazione del progetto

Si crea un nuovo progetto di tipo “App Windows Forms” impostando un nome al progetto di proprio piacimento e nella maschera successiva selezionare la versione del Framework 7.
Una volta terminata la creazione del progetto non resta che aggiungere alla form tre pulsanti, il primo dovrà unire due file pdf in un solo file, importando le varie pagine dei due file pdf, il secondo pulsante permetterà di impostare la password ed il terzo pulsante togliere la password.
Per il primo pulsante, impostiamo la proprietà “Text” con il valore “Concatena file” e la proprietà “Name” impostata su “BtnConcatenaFile”, per il secondo pulsante, per la proprietà “Text” impostare il valore “Protezione” e la proprietà “Name” con il valore “BtnProtezione”. Infine il terzo ed ultimo pulsante impostare la proprietà “Name” con il valore “BtnToglieProtezione” e la proprietà “Text” con il valore “Togli Protezione”, il tutto sarà come mostrato in figura 1.


Figura 1 – La disposizione dei pulsanti per i vari esempi

Dopo aver aggiunti i pulsanti, non resta che aggiungere al progetto il riferimento alla libreria “PdfSharp” come già illustrato in un precedente articolo visibile qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-creazione-di-un-file-pdf-tramite-la-libreri_1822.aspx


Dopo aver aggiunto al nostro progetto il riferimento alla libreria “PdfSharp” la parte di creazione del progetto è terminata.

Stesura del codice

Terminata la predisposizione del progetto con i riferimenti ed i vari pulsanti, non resta che scrivere il codice per i vari pulsanti.
Passiamo in visualizzazione codice, ed in alto sopra ad ogni dichiarazione inseriamo lo spazio dei nomi per la gestione della libreria gratuita “PdfSharp”, di seguito si riporta il frammento di codice delle suddette operazioni.

C#

using PdfSharp.Pdf;

using PdfSharp.Pdf.IO;

using PdfSharp.Pdf.Security;

using System.Reflection.Metadata;

using System.Text;



Ora passiamo in visualizzazione grafica, e facciamo doppio click sul primo pulsante, in modo che passiamo in visualizzazione codice dell’evento click del pulsante.
Nell’evento click si creano tre oggetti di tipo “PdfDocument”, uno sarà l’insieme di tutte le pagine di entrambi i file, e salverà il nuovo file in una determinata cartella, gli altri saranno i file pdf da unire al nuovo file pdf, l’apertura dei file avviene tramite il metodo “Open” passando il riferimento del percorso e nome file e tipologia di apertura (import). Per ogni pagina che troviamo nel file pdf aperto, lo inseriamo nel file nuovo tramite il metodo “AddPage”, infine tramite il metodo “Save” salviamo sul disco il file creato.
Di seguito si riporta il codice dell’evento click del pulsante delle suddette operazioni.



C#

  private void BtnConcatenaFile_Click(object sender, EventArgs e)

        {

            try

            {

                //creazione nuovo file

                PdfDocument NuovoPdf = new PdfDocument();

                PdfDocument documento1 = PdfReader.Open("C:\\Varie\\documento1.pdf", PdfDocumentOpenMode.Import);

                PdfDocument documento2 = PdfReader.Open("C:\\Varie\\documento2.pdf", PdfDocumentOpenMode.Import);

                //Importo le pagine del primo file

                foreach (PdfPage pagina in documento1.Pages)

                {

                    NuovoPdf.AddPage(pagina);

 

                }

                //importo lep agine del secondo file

                foreach (PdfPage pagina in documento2.Pages)

                {

                    NuovoPdf.AddPage(pagina);

 

                }

 

                NuovoPdf.Save("C:\\Varie\\NuovoDocumentoConpiuFile.pdf");

 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }



Terminata la stesura del codice, non resta che testarlo per verificare la correttezza dei dati, occorre aggiungere nell’evento di inizializzazione della form, il riferimento encoding, visto che usiamo il Framework 7, di seguito si riporta le suddette operazioni.

C#

public Form1()

        {

            InitializeComponent();

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        }



Ritorniamo in modalità grafica, e facciamo click sul secondo pulsante, quello relativo con il testo “Protezione”, nel fare il doppio click si passerà in modalità codice nell’evento click del pulsante.
In questo evento, dobbiamo aprire un file “Pdf” esistente ed impostare la password, tramite la classe “PdfSecuritySettings” oltre ad impostare le password (per utente normale ed utente superiore) , possiamo abilitare determinate funzionalità per l’utente normale, per esempio disabilitare la possibilità di fare la stampa, il tutto come mostrato in figura 2.

Figura 2 – Il pulsante stampa disabilitato

Tramite il metodo “Save” salviamo il file con le impostazioni di protezione e lo rendiamo protetto.
Di seguito si riporta il codice dell’evento click del pulsante delle suddette operazioni.


C#

 

private void BtnProtezione_Click(object sender, EventArgs e)

        {

            try

            {

                //creazione nuovo file

                PdfDocument NuovoPdf = PdfReader.Open("C:\\Varie\\Miofile.pdf");

                PdfSecuritySettings ImpostazioniSicurezza = NuovoPdf.SecuritySettings;

                //Livello di sicurezza

                //Con questa password posso fare solo quello che ho impostato a true, altrimenti non me lo permette

                ImpostazioniSicurezza.UserPassword = "MiaPassword";

                //Con questa password posso fare tutto

                ImpostazioniSicurezza.OwnerPassword = "password";

                //Imposto le restrizioni

                ImpostazioniSicurezza.PermitAccessibilityExtractContent = false;

                ImpostazioniSicurezza.PermitAnnotations = false;

                ImpostazioniSicurezza.PermitAssembleDocument = false;

                ImpostazioniSicurezza.PermitExtractContent = false;

                ImpostazioniSicurezza.PermitFormsFill = false;

                ImpostazioniSicurezza.PermitFullQualityPrint = false;

                ImpostazioniSicurezza.PermitModifyDocument = false;

                ImpostazioniSicurezza.PermitPrint = false;

 

                NuovoPdf.Save("C:\\Varie\\DocumentoPassword.pdf");

 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }



Anche in questo caso, eseguiamo il nostro progetto e facciamo le prove, chi userà la password con il valore “MiaPassword” vedrà alcune funzionalità disabilitate, come il pulsante di stampa, mentre chi entra con la password “password” avrà tutte le funzionalità abilitate.
Ora passiamo in visualizzazione grafica e facciamo doppio click sul pulsante con il testo “Togli protezione”, in modo da passare in visualizzazione codice, nell’evento click del pulsante.
In questo pulsante, andremo a togliere la password, o meglio apriamo il file protetto, e tramite un oggetto di tipo “PdfDocument” che fa riferimento al file pdf aperto con la password, lo salveremo senza password.
Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

private void BtnToglieProtezione_Click(object sender, EventArgs e)

        {

            try

            {

                //creazione nuovo file

                PdfDocument NuovoPdf = PdfReader.Open("C:\\Varie\\DocumentoPassword.pdf", "password");

 

                NuovoPdf.Save("C:\\Varie\\DocumentoPasswordSenzaPassword.pdf");

 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 





Conclusioni

L’articolo ha fornito al lettore alcuni aspetti della gestione dei file pdf, offerti dalla libreria gratuita “PdfSharp”, che semplifica lo sviluppo di applicazioni e che permette al programmatore di utilizzare particolari funzionalità per modificare e creare file pdf in vari ambiti.
La libreria, gratuita anche per uso commerciale, offre diverse funzionalità anche per operazioni avanzate.

Il codice illustrato in questo articolo può essere utilizzato anche per altri scenari, in particolare per l'ambiente web con la tecnologia Asp.Net

sabato 15 aprile 2023

Download ebook ASP.NET Core APIs

 


Disponibile gratuitamente un ebook in lingua inglese di circa 80 pagine sulla tecnologia Asp.Net Core.

L'ebook è in formato Pdf o per dispositivi mobile.

Per maggiori informazioni e download visitate il seguente sito Free Ebook - ASP.NET Core APIs Succinctly (syncfusion.com)

venerdì 14 aprile 2023

linkedin togliere open to work

 


In questi giorni è possibile che sul proprio profilo venga inavvertitamente impostato sul proprio profilo Linkedin, la scritta "openToWork" sulla propria immagine.

Nel caso che si vuole togliere per vari motivi (per il proprio datore o per non avere troppi contatti) è possibile toglierlo, dopo aver effettuato il login ed aver fatto click sulla voce "Visualizza Profilo", nella parte sotto la foto, dove c'è la scritta "Disponibile a lavorare" (figura 2) fare click sulla matita.

Figura 2 - l'icona della matita per modificare lo stato

Nella finestra che viene aperta (figura 3) fare click sulla freccia verso rivolta verso il basso nella voce "Tutti gli utenti linkedin" e tra le varie voci selezionare "Persone che usano Linkedin Recruiter", e salvare le modifiche.


Figura 3 - Il cambio di stato che toglie la scritta open to work

A questo punto la nostra immagine tornerà come in precedenza, ossia senza scritta "Open To Work".





giovedì 13 aprile 2023

Sql Server elencare le colonne di una tabella tramite SQL

La seguente istruzione SQL, permette di elencare tutte le colonne di una determinata tabella, nel database Sql Server.

SELECT *
FROM NomeDB.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Tabella';

mercoledì 12 aprile 2023

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

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.