Как я могу изменить вид файлов 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);
}
}
}
}
}