在过去的几个月中,我一直致力于使用Windows 8.1 PDF API的应用程序。它在各种设备上都运行得很好,包括:
然而,我们最近购买了两个Surface 2 RT用于运行此应用程序,我们现在面临一个奇怪的问题。我已将问题缩小到PDF API。在下面的PNG中,您将看到渲染中存在一些奇怪的行为,导致生成的图像中出现一些空白区域。当我接近“原始”大小(我将在PdfPageRenderOptions中指定任何大小时,我将得到的大小似乎工作正常,考虑到它从一个设备更改为另一个设备,这不是真正的“原始”)。但是,如果我尝试从PDF中渲染一个稍大的图像,这就是结果。
渲染: http://postimg.org/gallery/226weuga/
Surface 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上。这显然是一个硬件问题。
答案 0 :(得分:2)
API是关于设备DPI的错误。降低DPI /分辨率可以解决问题。他们现在正在修复。
答案 1 :(得分:0)