转换后的PDF图像在UWP中看起来很模糊

时间:2018-08-20 07:27:01

标签: image pdf uwp pdf-generation image-quality

我想使用c#,xaml将pdf文件转换为UWP中的图像UI控件。

我已经阅读了另一种使用Flip Viewer的方法,但是我需要转换后的PDF文件中的每个图像文件。

所以我修改了一些现有示例以打开pdf文件。

我的问题是转换后的图像文件的质量非常差。

我什至看不到字母。

但是此质量问题在其他pdf样本中相同。

看看我的代码。


private PdfDocument pdfDocument;

private async void LoadDocument()
    {
        pdfDocument = null;

        //Output means my image UI control (pdf image will be added)
        Output.Source = null;

        //PageNumberBox shows current page
        PageNumberBox.Text = "1";

        var picker = new FileOpenPicker();
        picker.FileTypeFilter.Add(".pdf");
        StorageFile file = await picker.PickSingleFileAsync();

        if (file != null)
        {               
            try
            {
                pdfDocument = await PdfDocument.LoadFromFileAsync(file);
            }
            catch (Exception ex)
            {                   
            }

            if (pdfDocument != null)
            {  // I use this text to move page.
                PageCountText.Text = pdfDocument.PageCount.ToString();                    
            }                
        }            

        uint pageNumber;
        if (!uint.TryParse(PageNumberBox.Text, out pageNumber) || (pageNumber < 1) || (pageNumber > pdfDocument.PageCount))
        {
            return;
        }

        Output.Source = null;

        // Convert from 1-based page number to 0-based page index.            
        uint pageIndex = pageNumber-1 ;

        using (PdfPage page = pdfDocument.GetPage(pageIndex))
        {
            var stream = new InMemoryRandomAccessStream();

            await page.RenderToStreamAsync(stream);

            BitmapImage src = new BitmapImage();
            Output.Source = src;
            await src.SetSourceAsync(stream);
        }
    }

这是我的xaml代码。

<Grid>
    <ScrollViewer >            
                <TextBlock Name="ViewPageLabel"VerticalAlignment="center">Now page</TextBlock>                   
                <TextBox x:Name="PageNumberBox" InputScope="Number" Width="30" Text="1" TextAlignment="Right" Margin="5,0,5,0"
                        AutomationProperties.LabeledBy="{Binding ElementName=ViewPageLabel}"/>
                <TextBlock VerticalAlignment="Center">of <Run x:Name="PageCountText"/>.</TextBlock>
    </ScrollViewer>
</Grid>

有什么建议吗?

请帮助我。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

听起来您遇到了一个常见问题,您需要动态调整将PDF页面呈现给图像的分辨率。

我对那个PDF库不熟悉,但是看来您需要使用需要 PdfPageRenderOptions 参数的 RenderToStreamAsync() 重载来实现。 / p>