将PDF保存到文件

时间:2014-10-30 04:31:59

标签: c# pdf windows-store-apps windows-8.1

我正在开发适用于Windows 8.1的Windows应用商店应用,我找不到任何可以解决我需要做的事情。我正在尝试将pdf页面的图像保存到我的本地应用程序数据存储中。我有以下内容:

private async void GetFirstPage()
    {
        // Retrieve file from FutureAccessList
        StorageFile file = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFileAsync(token);

        // Truncate last 4 chars; ex: '.pdf'
        FileName = file.Name.Substring(0, file.Name.Length - 4);

        // Get access to pdf functionality from file
        PdfDocument doc = await PdfDocument.LoadFromFileAsync(file);

        // Get a copy of the first page
        PdfPage page = doc.GetPage(0);

        // Below could be used to tweak render options for optimizations later
        //PdfPageRenderOptions options = new PdfPageRenderOptions();

        // Render the first page to the BitmapImage
        InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();
        await page.RenderToStreamAsync(stream);

        // Common code
        Cover.SetSource(stream);

        // Convert the active BitmapImage Cover to a storage file to be stored locally
        // ???

    }

变量Cover是一个BitmapImage,它绑定在XAML中以向用户显示图像。我想将此图像保存到我的本地应用程序数据中,以便每次我的应用程序打开时都不必通过PDF库重新呈现它!问题是我无法从流中保存Windows Store应用程序中的任何内容,除非它是我所知的文本(对我来说没有文件流或fileoutputstream),并且Cover的URI源为null,因为它来自流,很难将我的BitmapImage,Cover,到StorageFile,以便正确保存Windows Store。

目前一切都适合我,我很沮丧每次我的应用程序打开时都会重新将pdf页面重新渲染到我的bitmapimage。提前感谢任何输入!

1 个答案:

答案 0 :(得分:0)

您需要直接从PdfPage保存图像,而不是从BitmapImage保存图像,因为您无法从BitmapImage中获取数据。 PdfPage.RenderToStreamAsync已经将流编码为位图,因此除了将其发送到文件之外,您不需要进行任何操作。这与保存到InMemoryRandomAccessStream的操作基本相同,除了基于文件的流:

//We need a StorageFile to save into.
StorageFile saveFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("safedPdf.png",CreationCollisionOption.GenerateUniqueName);

using (var saveStream = await saveFile.OpenAsync(FileAccessMode.ReadWrite))
{
    await page.RenderToStreamAsync(saveStream);
}