2017-01-15 235 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