【Win 10 应用开发】打印UI元素
标签:
原文:【Win 10 应用开发】打印UI元素Windows App支持将UI界面进行打印的功能,这与浏览器中的打印网页的用途相近,其好处就是“所见即所得”,直接把界面上呈现的内容打印下来,比重新创建打印图像方便得多。
要在通用App中实现打印,主要依靠以下几个类型:
PrintManager:位于Windows.Graphics.Printing命名空间,主要负责显示打印对话框,设置打印源等操作。在使用时,首先调用GetForCurrentView静态方法得到一个PrintManager实例;随后处理它的PrintTaskRequested,当要进行打印时就会发生该事件。
PrintTask:表示一个打印任务。在PrintManager对象的PrintTaskRequested事件处理中创建打印任务。
PrintDocument:这个类比较关键(位于Windows.UI.Xaml.Printing命名空间)。通过它可以将UI元素转换为待打印的文档逻辑。a、处理Paginate事件,以计算打印的分页,计算后可以调用PrintDocument.SetPreviewPageCount方法来设置预览页面的总数。b、处理GetPreviewPage事件,当请求预览单个页面时会发生该事件,在处理过程中,可以调用PrintDocument.SetPreviewPage方法来设置要预览的特定页面。c、当开始打印时,会发生AddPages事件,此时调用PrintDocument.AddPage方法向打印文档逻辑添加页面,当所有要打印的页面都添加完毕后,请调用AddPagesComplete方法通知系统可以提交打印了。
当你刚刚接触打印时,你会觉得它好像很复杂,其实,当你动手做过实验后,你就会发现,其实也没什么。我们作为新时代的开发者,应当有迎难而上的精神。
下面咱们来做个例子,把页面上的一个RichTextBlock控件中的内容打印出来。
页面上的XAML大致如下,老周直接贴出来,不作解释了,我相信你能看懂XAML,如果看不懂,那就算了。
<Border Padding="30" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <StackPanel Margin="0,15" Orientation="Horizontal"> <Button Content="开始打印" Click="OnClick"/> </StackPanel> <RichTextBlock Name="tb" Grid.Row="1" Width="300" > <Paragraph FontSize="36" TextAlignment="Center" FontFamily="楷体"> 床前明月光, <LineBreak/> 疑是地上霜。 <LineBreak/> 舉頭望明月, <LineBreak/> 低頭思故鄉。 </Paragraph> <Paragraph TextAlignment="Center"> <InlineUIContainer> <Image Height="200" Source="http://img155.poco.cn/mypoco/myphoto/20110305/15/20110305154657_366496406.gif"/> </InlineUIContainer> </Paragraph> </RichTextBlock> …… </Grid> </Border>
咱们这例子要打印的内容,就是那个名为tb的家伙。
进入页面的代码文件,在页面类中声明以下字段:
PrintManager printmgr = PrintManager.GetForCurrentView(); PrintDocument printDic = null; RotateTransform rottrf =null; PrintTask task = null;
RotateTransform变量的作用是把tb进行旋转变换,这是为了处理打印页面的方向,如果页面是横向,我就把tb转90度。
处理PrintManager的PrintTaskRequested事件,创建打印任务,并设置打印源。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68717.html