Surface 2 RT上的Windows PDF API渲染错误

时间:2014-02-07 17:22:12

标签: c# .net pdf windows-runtime winrt-xaml

在过去的几个月中,我一直致力于使用Windows 8.1 PDF API的应用程序。它在各种设备上都运行得很好,包括:

  • 我的开发PC运行8.1 Pro
  • 运行Windows 8.1 Pro的笔记本电脑(未启用触控功能)
  • 运行Windows 8.1 Pro的虚拟机
  • 运行Windows 8.1 Enterprise的虚拟机
  • 运行Windows Embedded 8.1 Industry Pro的虚拟机
  • 运行Windows 8.1 Pro的迷你PC
  • 运行Windows 8.1 Home的三星平板电脑

然而,我们最近购买了两个Surface 2 RT用于运行此应用程序,我们现在面临一个奇怪的问题。我已将问题缩小到PDF API。在下面的PNG中,您将看到渲染中存在一些奇怪的行为,导致生成的图像中出现一些空白区域。当我接近“原始”大小(我将在PdfPageRenderOptions中指定任何大小时,我将得到的大小似乎工作正常,考虑到它从一个设备更改为另一个设备,这不是真正的“原始”)。但是,如果我尝试从PDF中渲染一个稍大的图像,这就是结果。

渲染: http://postimg.org/gallery/226weuga/

Surface RT设备

  • DebugOriginal_Surface.png :未缩放时所需的行为。这是我在Surface RT设备上得到的。
  • DebugZoom_Surface.png :缩放时出现问题。这是我在Surface RT设备上得到的。
  • AnotherZoomLevel_Surface.png :进一步缩放时的另一个有问题的行为。这就是我得到的。

任何其他设备

  • DebugZoomed_DevMachine.png :缩放时所需的行为。这是我在任何Windows非RT设备上获得的。
  • DebugOriginal_DevMachine.png :未缩放时的所需行为。这是我在任何Windows非RT设备上获得的。

我删除了我的代码,以确保它不是UI问题或我缓存pdf文件的方式等。我的代码现在非常直接,如下面的示例所示:

var pdfFile = await StorageFile.GetFileFromPathAsync(NavigationService.Drawing.Path);
_pdfDoc = await PdfDocument.LoadFromFileAsync(pdfFile);

if (_pdfDoc.PageCount > 0)
{
    StorageFolder folder = ApplicationData.Current.TemporaryFolder;
    StorageFile pngFileOriginal = await folder.CreateFileAsync("DebugOriginal_" + Guid.NewGuid().ToString() + ".png", CreationCollisionOption.ReplaceExisting);
    StorageFile pngFileZoomed = await folder.CreateFileAsync("DebugZoomed_" + Guid.NewGuid().ToString() + ".png", CreationCollisionOption.ReplaceExisting);

    using (IRandomAccessStream fileStream = await pngFileOriginal.OpenAsync(FileAccessMode.ReadWrite))
    {
        await _pdfDoc.GetPage(0).RenderToStreamAsync(fileStream);
        await fileStream.FlushAsync();
    }

    using (IRandomAccessStream fileStream = await pngFileZoomed.OpenAsync(FileAccessMode.ReadWrite))
    {
        await _pdfDoc.GetPage(0).RenderToStreamAsync(fileStream, new PdfPageRenderOptions { DestinationWidth = 2000 });
        await fileStream.FlushAsync();
    }
}

这是API的问题还是我的问题?

修改

Microsoft的PDF API示例(http://code.msdn.microsoft.com/windowsapps/PDF-viewer-sample-85a4bb30)在Surface 2 RT设备上执行相同操作。

编辑2

该错误出现在Surface 2 RT上,但不存在于Surface 1 RT上。这显然是一个硬件问题。

2 个答案:

答案 0 :(得分:2)

API是关于设备DPI的错误。降低DPI /分辨率可以解决问题。他们现在正在修复。

答案 1 :(得分:0)

针对http://support.microsoft.com/kb/2955164

中提供的Windows可更新中包含的此问题已发布修复程序