2017-01-15 4 views
0

Ich möchte fragen, wie Sie unsere eigenen Inhalte drucken. Beispiel wie wir einige Formulare haben und nach dem Absenden des Formulars gehen die Details zu Seite zu drucken. Und dann drucken.Drucken von Apps (UWP)

Ich habe das Beispiel von https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/Printing/cs verwendet.

Aber wenn ich versuchte, meinen Inhalt zu drucken, wird die Seite zu einer leeren Seite.

Ich bin neu in der Windows Phone-Entwicklung und C#.

Antwort

2

Die official sample enthält viele komplexe Funktionen für den Druck. Direkter Austausch einiger Inhalte der Probe funktioniert möglicherweise nicht gut. Ich habe hier eine Beispieldemo, die Druckanforderungen erfüllen kann. Und ersetzen Sie einfach den Inhalt innerhalb PrintArea Grid zu Ihrem eigenen, das Beispiel kann Ihren Inhalt drucken.

XAML-Code

<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> 

-Code hinter:

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); 
    }  

Wenn Sie mehr Anforderungen haben, zum Beispiel, erfordern mehr print options, benutzen Sie bitte die official document sowie die offizielle Probe verweisen.

+0

Vielen Dank. Genau wie was ich suche. :) – Natasiah

Verwandte Themen