Renderizzare un PDF come immagine nella Universal Windows Platform

di , in Windows 10,

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

Visualizza/aggiungi commenti

Renderizzare un PDF come immagine nella Universal Windows Platform (#239)
| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi