【发布时间】:2015-01-14 16:29:39
【问题描述】:
我正在尝试允许用户在保存或打印文档之前使用触摸屏对文档进行注释。本质上,我在代码中将文档组装成三个部分 - 一个 ImageBrush,其中包含在第三方应用程序中创建的一些动态文本的“图片”,一个具有空白表单(透明背景)的 ImageBrush,以及一个代表来自输入的笔画集合触摸屏。我知道这不是创建 XPS 的首选方式,但是我无法在运行时访问动态文本以将其生成为 TextBlocks 等。该文档在 XAML 中定义如下:
<Viewbox x:Name="viewboxDocView" Grid.Row="0">
<FixedPage x:Name="fixedPage" Width="720" Height="960" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10">
<InkCanvas x:Name="inkCanvas" Width="720" Height="960" HorizontalAlignment="Center" VerticalAlignment="Center" ></InkCanvas>
</FixedPage>
</Viewbox>
在后面的代码中,我将 FixedPage 背景设置为显示动态文本,并将 InkCanvas 背景设置为显示透明表单。
inkCanvas.Background = myImageBrush;
fixedPage.Background = myOtherImageBrush;
它在我的应用程序中显示得很漂亮,可以很好地保存为 XPS 文件,并且在 XPS Viewer 和 Microsoft Reader 中都显示得很漂亮。唯一的问题是当我尝试从这些应用程序中打印时,页面图像很小。这两个图像完整打印并按比例缩小,笔触显示为全尺寸,但在大多数打印机上会被裁剪,因此只有左上角部分可见。
我将页面尺寸明确定义为 720 x 960,因为 960 * 1/96" = 10 英寸和 720 * 1/96" = 7.5 英寸,强制在 8.5x11" 页面上至少留出 0.5" 边距。当我打印时,图像正好是 2.4" x 3.2",这意味着打印机分辨率是 960 / 3.2 = 300 dpi,而不是预期的 96 dpi。我知道打印机通常使用 300 dpi,所以这并不完全令人惊讶,但我认为 FixedDocument 的重点是所见即所得的概念,如 here 所述。
有没有办法将页面明确定义为 7.5" x 10"(或 8.5" x 11",内容居中),以便正确打印?似乎当我开始在 XAML 中调整大小或尝试使用转换时,它会破坏屏幕显示,这对应用程序来说最终更重要。
【问题讨论】:
-
您打印的是
Viewbox还是FixedPage? -
我正在创建一个以 FixedPage 作为子级的 FixedDocument 并打印它。
-
更具体地说,我将 FixedDocument 保存为 .xps 文件并尝试从 Microsoft XPS Viewer (Windows 7) 或 Microsoft Reader (Windows 8) 打印它
-
也许显示一些您正在使用的代码? PrintDialog 以及我愿意查看的文档设置存在很多误解。此外,如果您想深入了解它,您可以阅读 XPS 规范。如果在创建后将
.xps更改为.zip并查看文档内容,则可以查看XML 形式的内容。
标签: c# wpf printing fixeddocument