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
Creare una libreria CSS universale: Clip-path
.NET Aspire per applicazioni distribuite
Escludere alcuni file da GitHub Secret Scanning
Ridurre il reflow ottimizzando il CSS
Definire il metodo di rilascio in .NET Aspire
Ospitare n8n su Azure App Service
Scrivere selettori CSS più semplici ed efficienti con :is()
Configurare e gestire sidecar container in Azure App Service
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Loggare le query più lente con Entity Framework
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
I più letti di oggi
- Microsoft Security Bulletin MS02-068
- Community Champion Basta!Italia 2009 - Roma
- Real Code Conference 4.0 - Firenze
- Il team di IIS rilascia Web Deployment Tool 1.0 e Database Manager 1.0
- IIS guadagna terreno
- Disponibile la versione 2.1 di IISLockDown
- gRPC con .NET
- Impedire il remote linking di immagini tramite URL Rewrite Module di IIS 7


