I’m working on a project where users are going to load a PDF, but will be returning to the same PDF again and again. I was having some problems with Microsoft’s normally amazing PDF showcase application on lower end devices (my app needs to run well on an original Surface), so I tested this solution out.
So far it’s working really well. The navigation is clean and fast, loading times are great, even for PDFs that are upwards of 100 pages.
The downsides are
- the initial “processing” time (splitting the pages up and saving them as images) is a little costly. For my larger PDFs, it can take 90-120 seconds on a Surface 1. But once the PDF is split into individual images, loading is very fast.
- I’m missing things like page zooming, semantic zoom. If that is something that matters, check out the showcase application above.
First, I added a FlipView to my XAML. The ItemTemplate is basically just an image.
The file I’m loading is loaded locally in my application. But you could download the PDF to a StorageFile and load it from there using this same code. Then use PdfDocument to load the file.
Then I just run through the PDF document page by page and render them out to image files.
At the bottom of this snippet, I add the image path to PdfImages, an ObservableCollection<string> object. Then I just bind my FlipView to that collection.
For this sample, I included a 36 page full-color PDF. It loads the PDF and renders and saves the PDF files in about a second.