Как я могу изменить вид файлов PDF в приложениях UWP

Открываю файл PDF как изображение и отображаю его во флипвью.

public async void OpenPDF(StorageFile file)
    {        
        var pdfFile = await PdfDocument.LoadFromFileAsync(file);

        if (pdfFile == null)
            return;

        for (uint i = 0; i < pdfFile.PageCount; i++)
        {
            StorageFolder tempFolder = ApplicationData.Current.LocalFolder;
            StorageFile jpgFile = await tempFolder.CreateFileAsync(pdfFile + "-Page-" + i.ToString() + ".png", CreationCollisionOption.ReplaceExisting);
            var pdfPage = pdfFile.GetPage(i);

            if (jpgFile != null && pdfPage != null)
            {
                IRandomAccessStream randomStream = await jpgFile.OpenAsync(FileAccessMode.ReadWrite);
                await pdfPage.RenderToStreamAsync(randomStream);
                await randomStream.FlushAsync();
                randomStream.Dispose();
                pdfPage.Dispose();
            }

            PdfImages.Add(jpgFile.Path);
        }
        this.pdfViewer.ItemsSource = PdfImages;
    }

Мне нужно изменить представления (FitWidth,FitPage,100%), как Windows 8.1 PDF Viewer.

В приложении Windows 8.1 я использовал приложение Reader, и оно откроет PDF рядом с экраном приложения. Но в UWP это не работает так же. Поэтому я ищу альтернативы. Многие PDF Viewer доступен, но все должны быть лицензированы. Так есть ли бесплатный источник?

1 ответ

В UWP вы можете отображать содержимое PDF-файлов в элементе управления Image, затем вы можете установить свойство Image.Stretch, чтобы описать, как растягивать Image, чтобы заполнить целевой прямоугольник. Вы также можете настроить макет для отображения PDF-файла, как вы хотите. Более подробную информацию об отображении PDF-файлов смотрите в примере PdfDocument.

Кроме того, вот простой пример,

MainPage.xaml,

<Grid>
    <ListView Name="PDFListView" ItemsSource="{x:Bind PdfPages}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="BitmapImage">
                <Image Source="{x:Bind }" Stretch="Uniform"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

MainPage.xaml.cs,

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            PdfPages = new ObservableCollection<BitmapImage>();
            this.Loaded += MainPage_Loaded;
        }

        PdfDocument pdfDocument;
        public ObservableCollection<BitmapImage> PdfPages;
        private async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var picker = new FileOpenPicker();
            picker.FileTypeFilter.Add(".pdf");
            var file = await picker.PickSingleFileAsync();
            if (file != null)
            {
                try
                {

                    pdfDocument = await PdfDocument.LoadFromFileAsync(file);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
            }

            if (pdfDocument != null)
            {
                uint pageCount = pdfDocument.PageCount;
                for (uint pageIndex = 0; pageIndex < pageCount; pageIndex++)
                {
                    using (PdfPage page = pdfDocument.GetPage(pageIndex))
                    {
                        var stream = new InMemoryRandomAccessStream();
                        await page.RenderToStreamAsync(stream);
                        BitmapImage src = new BitmapImage();
                        await src.SetSourceAsync(stream);
                        PdfPages.Add(src);
                    }
                }
            }
        }
    }
Другие вопросы по тегам