0
我想问如何打印我们自己的内容。例如我们有一些表单,并在提交表单后,详细信息转到页面打印。然后打印。打印应用程序(UWP)
我用https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/Printing/cs的例子。
但是当我试图打印我的内容时,页面变成空白页面。
我是新来的Windows手机开发和C#。
我想问如何打印我们自己的内容。例如我们有一些表单,并在提交表单后,详细信息转到页面打印。然后打印。打印应用程序(UWP)
我用https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/Printing/cs的例子。
但是当我试图打印我的内容时,页面变成空白页面。
我是新来的Windows手机开发和C#。
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以及官方样片。
非常感谢。就像我在寻找什么。 :) – Natasiah