2017-01-15 10 views
0

私たち自身のコンテンツを印刷する方法についてお尋ねします。例として、いくつかのフォームがあり、フォームを送信した後、詳細はページ・トゥ・プリントに行きます。そして印刷してください。アプリから印刷する(UWP)

https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/Printing/csの例を使用しました。

私のコンテンツを印刷しようとすると、ページは空のページに変わります。

私は窓の電話開発とC#には新しいです。

答えて

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

関連する問題