【Win10应用开发】自定义打印选项
标签:
原文:【Win10应用开发】自定义打印选项老周在前一篇烂文中已经给大伙伴们演示了如何打印UI元素,今天的烂文就向各位介绍一下,如何向打印对话框添加自定义选项。如果只是讲如何实现,会比较抽象,也比较枯燥,而且相当无聊,更是说不清楚,毕竟这打印API用起来要比其他API稍稍复杂了一点。所以老周就做了一个打印图片的垃圾应用,在打印对话框中,你可以选择设置要打印图片的不透明度、旋转角度(0度,90度,180度,270度)。
OK,为环保事业做贡献,老周今天也节约一点口水。下面咱们开始干活。
1、先来设计一些UI,该UI简单大方朴素美丽极致,其XAML代码如下:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Content="打印" Click="OnClick"/> <Image Grid.Row="1" Width="300" Height="200" VerticalAlignment="Center" HorizontalAlignment="Center" Name="img" Source="Assets/03.jpg"/> </Grid>
按钮的作用就是打开打印对话框,Image显示要打印的图片。不过呢,为了打印过程中设置选项(就是老周上面讲的什么不透明度等)时不会干扰界面上的Image,我打算在代码中再声明一个Image对象,专门用来打印。代码是这样的:
Image copyImage = null; public MainPage() { this.InitializeComponent(); copyImage = new Image(); copyImage.Source = img.Source; copyImage.Stretch = Stretch.Uniform; rotateTrsf = new RotateTransform() { Angle = 0d }; copyImage.RenderTransformOrigin = new Point(0.5, 0.5); this.copyImage.RenderTransform = rotateTrsf; }
大家会看到我弄了个RotateTransform对象,干啥用的呢?你忘了吗,我刚说了要在打印对话框中选择图片的旋转角度的,对了,就是用来让copyImage进行旋转的。
2、接下来实现打印,基本过程我在前一篇烂文中说过,获取PrintManager实例,处理PrintTaskRequested事件,当有新的打印任务请求时,会发生该事件。看:
private void PrintMgr_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args) { PrintTask task = null; task = args.Request.CreatePrintTask("打印图像", async printSrcrqtArgs => { task.Completed += async (ps, pe) => { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => { MessageDialog msgdlg = new MessageDialog(""); if (pe.Completion == PrintTaskCompletion.Canceled) { msgdlg.Content = "打印被取消。"; } else if (pe.Completion == PrintTaskCompletion.Abandoned) { msgdlg.Content = "已放弃打印。"; } else if (pe.Completion == PrintTaskCompletion.Submitted) { msgdlg.Content = "已提交打印。"; } await msgdlg.ShowAsync(); }); }; await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { printSrcrqtArgs.SetSource(_printdoc?.DocumentSource); }); }); task.Options.Orientation = PrintOrientation.Landscape; // 创建自定义选项 PrintTaskOptionDetails optionDetails = PrintTaskOptionDetails.GetFromPrintTaskOptions(task.Options); // 清除所有选项 optionDetails.DisplayedOptions.Clear(); // 添加标准项:页面方向 optionDetails.DisplayedOptions.Add(StandardPrintTaskOptions.Orientation); // 添加自定义选项 // 不透明度 PrintCustomItemListOptionDetails list = optionDetails.CreateItemListOption(OPTION_OPACITY, "不透明度"); list.AddItem(OPACITY_50PC, "50 %"); list.AddItem(OPACITY_75PC, "75 %"); list.AddItem(OPACITY_100PC, "100 %"); optionDetails.DisplayedOptions.Add(OPTION_OPACITY); // 旋转角度 list = optionDetails.CreateItemListOption(OPTION_ANGLE, "旋转角度"); list.AddItem(ANGLE_0, "0 度"); list.AddItem(ANGLE_90, "90 度"); list.AddItem(ANGLE_180, "180 度"); list.AddItem(ANGLE_270, "270 度"); optionDetails.DisplayedOptions.Add(OPTION_ANGLE); // 处理选项更改事件 optionDetails.OptionChanged += OptionDetails_OptionChanged; }
为了节约代码行数,同时为了展现C#语言的风采,我这里套用了几层Lambda表达式。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68721.html