Nelle applicazioni tipiche "da ufficio", potrebbe venire comodo per i partecipanti di un meeting, prendere appunti su documenti condivisi da una precedente email come, ad esempio, un file PDF. In casi come questo, quindi, viene utile, oltre a mostrare il PDF nella sua interezza, renderizzare una singola pagina come immagine, così che sia "zoomabile" e così che ci si possa interagile con ink e touch.
Supponendo di aver già a disposizione il PDF ottenuto come StorageFile, possiamo caricarlo in memoria sfruttando la classe PdfDocument, dalla quale possiamo anche estrapolare la pagina che ci interessa renderizzare:
private async Task<BitmapImage> CreateImageFromPdfPageAsync(StorageFile file, int pageNumber) { var document = await PdfDocument.LoadFromFileAsync(file); using var memoryStream = new InMemoryRandomAccessStream(); await document.GetPage((uint)pageNumber).RenderToStreamAsync(memory); // ... }
Una volta ottenuta la pagina come stream, possiamo facilmente recuperare l'array di byte, sfruttando anche a livello di sintassi le ultime novità di C# 8:
using var reader = new DataReader(memoryStream); await reader.LoadAsync((uint)memoryStream.Size); var imageAsBytes = new byte[memoryStream.Size]; reader.ReadBytes(imageAsBytes);
Così facendo abbiamo già un oggetto contenente la nostra immagine che possiamo utilizzare per salvarla, ad esempio, sul disco.
Qualora invece volessimo semplicemente visualizzarla a schermo, potremmo sostituire il metodo precedente con il seguente, che va a caricare lo stream letto dalla classe PdfDocument come Source dell'oggetto di tipo BitmapImage:
var bitmapImage = new BitmapImage(); await bitmapImage.SetSourceAsync(memoryStream);
L'immagine caricata può quindi essere associata ad un controllo Image pre-costruito a livello di XAML.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Miglioramenti nelle performance di Angular 16
Le novità di Angular: i miglioramenti alla CLI
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Generare un hash con SHA-3 in .NET
Gestire gli accessi con Token su Azure Container Registry
Ordinare randomicamente una lista in C#
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Creare un webhook in Azure DevOps
Utilizzare QuickGrid di Blazor con Entity Framework
Creare una libreria CSS universale: i bottoni
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
I più letti di oggi
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Speciale Windows Live Services: come integrarli nelle proprie applicazioni
- Rilasciata la RTM di SQL Server 2012, la versione Express subito in download
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- .NET Managed provider per MySQL
- WS-I approva Basic Profile 1.0
- Due regali dal Tech-Ed USA 2004: WSE 2.0 e VS 2005 Team System
- VS 2005 e SQL Server 2005 Express da scaricare
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Utilizzare CLEditor per consentire l'input di HTML in ASP.NET MVC