2017-01-15 155 views

回答

2

official sample包含许多复杂的打印功能。直接替换样本中的一些内容可能无法正常工作。我在这里有一个示例演示,它可以满足打印要求。只需将PrintArea格内的内容替换为您自己的内容,该示例就可以打印您的内容。

XAML代码

<Page.BottomAppBar> 
    <CommandBar> 
     <AppBarButton x:Name="appbar_Printer" 
         Click="appbar_Printer_Click" 
         Label="printer">  
     </AppBarButton> 
    </CommandBar> 
</Page.BottomAppBar> 

<Grid Background="White" x:Name="PrintArea" > 
    <TextBlock HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       FontSize="36" 
       Foreground="Black" 
       Text="Welcome Printed World!" /> 
</Grid> 

后面的代码:

PrintManager printmgr = PrintManager.GetForCurrentView();   
    PrintDocument printDoc = null;   
    PrintTask task = null; 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     printmgr.PrintTaskRequested += Printmgr_PrintTaskRequested; 
    } 
    private void Printmgr_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args) 
    { 
     var deferral = args.Request.GetDeferral(); 
     task = args.Request.CreatePrintTask("Print", OnPrintTaskSourceRequrested); 
     //task.Completed += PrintTask_Completed; 
     PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(task.Options);  
     deferral.Complete(); 
    } 
    //private void PrintTask_Completed(PrintTask sender, PrintTaskCompletedEventArgs args) 
    //{ 
    // //Completed 
    //} 
    private async void OnPrintTaskSourceRequrested(PrintTaskSourceRequestedArgs args) 
    { 
     var def = args.GetDeferral(); 
     await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, 
     () => 
     { 
      args.SetSource(printDoc?.DocumentSource); 
     }); 
     def.Complete(); 
    } 
    private async void appbar_Printer_Click(object sender, RoutedEventArgs e) 
    { 
     if (printDoc != null) 
     { 
      printDoc.GetPreviewPage -= OnGetPreviewPage; 
      printDoc.Paginate -= PrintDic_Paginate; 
      printDoc.AddPages -= PrintDic_AddPages; 
     } 
     this.printDoc = new PrintDocument();   
     printDoc.GetPreviewPage += OnGetPreviewPage;   
     printDoc.Paginate += PrintDic_Paginate; 
     printDoc.AddPages += PrintDic_AddPages;   
     bool showPrint = await PrintManager.ShowPrintUIAsync(); 
    }  
    private void PrintDic_AddPages(object sender, AddPagesEventArgs e) 
    { 
     printDoc.AddPage(this); 
     printDoc.AddPagesComplete(); 
    }  
    private void PrintDic_Paginate(object sender, PaginateEventArgs e) 
    { 
     PrintTaskOptions opt = task.Options; 
     PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(e.PrintTaskOptions); 
     printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final); 
    } 
    private void OnGetPreviewPage(object sender, GetPreviewPageEventArgs e) 
    { 
     printDoc.SetPreviewPage(e.PageNumber, PrintArea); 
    }  

如果您有更多的需求,例如,需要更多的print options,请参考official document以及官方样片。

+0

非常感谢。就像我在寻找什么。 :) – Natasiah