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

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

过去几个月,我一直在开发一个使用 Windows 8.1 PDF API 的应用程序。它在各种设备上都表现出色,包括:

  • 我的开发电脑运行 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 的迷你电脑
  • 运行 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 上。这显然是硬件问题。

最佳答案

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

关于c# - Surface 2 RT 上的 Windows PDF API 渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633992/

相关文章:

c# - Linq 查询基于多个字段查找重复对象且属性为空

c# - 使用 Aspose.PDF 在 PDF 中嵌入 TTF 字体

C# facebook graph/如何上传到相册id

.net - 如何在数据库中存储windows授权信息

c# - Youtube Data API C# - 无需请求用户凭据即可使用

google-chrome - 从服务器收到重复的 header

c# - 我们如何在没有动画的情况下显示 hubtile

c# - 计算不同的结果-方法 PointToScreen 获取桌面(屏幕)相关控件的点

pdf - powershell - 检查pdf是否加密

pdf - 允许某人将网页导出为 PDF 以提高可读性的最佳方法是什么?