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