如何在.NET Maui Windows10应用中打印简单文本?
在.NET Maui里实现文本打印功能
方法一:用.NET Maui跨平台打印API(推荐)
.NET Maui有专门的跨平台打印能力,先给项目装上Microsoft.Maui.Graphics.Printing这个NuGet包,再按下面步骤实现:
安装依赖包
在项目中安装Microsoft.Maui.Graphics.PrintingNuGet包。编写打印文本的方法
把要打印的字符串转换成可打印的文档,直接生成带文本的打印页面即可:using Microsoft.Maui.Graphics; using Microsoft.Maui.Graphics.Printing; public async Task PrintTextAsync(string textToPrint) { // 创建打印文档并设置标题 var document = new PrintDocument { Title = "文本打印" }; // 添加打印页面,定义文本绘制逻辑 document.Pages.Add(new PrintPage { // 设置A4页面尺寸(8.5x11英寸,1英寸=72点) Width = 8.5 * 72, Height = 11 * 72, RenderAction = (canvas, width, height) => { var textStyle = new Paint { Color = Colors.Black, Font = new Font("Arial", 12) }; // 从页面内边距位置开始绘制文本,自动换行 canvas.DrawString(textToPrint, 50, 50, width - 100, height - 100, HorizontalAlignment.Left, VerticalAlignment.Top, textStyle); } }); // 获取打印服务并执行打印 var printService = PrintService.GetDefault(); if (printService != null) { await printService.PrintAsync(document); } }触发打印
在按钮点击或需要打印的逻辑中调用方法:private async void PrintButton_Clicked(object sender, EventArgs e) { await PrintTextAsync("这是要打印的测试文本内容!"); }
方法二:基于你现有代码的Windows平台适配(仅Windows可用)
你用到的PrintManager是UWP专属API,只能在Windows平台生效,要接着你的代码完成功能,需要补全以下事件实现:
完善
PrintTaskRequested事件private void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args) { var deferral = args.Request.GetDeferral(); // 创建打印任务并关联文档源 var printTask = args.Request.CreatePrintTask("文本打印", sourceArgs => { sourceArgs.SetSource(printDocSource); deferral.Complete(); }); }实现
Paginate和GetPreviewPage事件
这两个事件负责生成打印预览和分页,需要在其中将文本渲染到页面上:private void Paginate(object sender, PaginateEventArgs e) { // 假设文本仅占1页,设置总预览页数 printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final); } private void GetPreviewPage(object sender, GetPreviewPageEventArgs e) { // 创建带文本的打印页面 var page = new Windows.UI.Xaml.Controls.Page(); var textBlock = new Windows.UI.Xaml.Controls.TextBlock { Text = "你要打印的字符串内容就在这里!", FontSize = 12, Margin = new Windows.UI.Xaml.Thickness(50), TextWrapping = Windows.UI.Xaml.TextWrapping.Wrap }; page.Content = textBlock; // 设置预览页面 printDoc.SetPreviewPage(e.PageNumber, page); }启动打印UI
在需要打印的地方调用:private async void StartPrint() { try { await PrintManager.ShowPrintUIAsync(); } catch (Exception ex) { // 处理打印异常,比如弹窗提示用户 } }
注意事项
PrintManager仅支持Windows平台,跨平台应用优先使用方法一的API,它会自动适配Android和iOS的原生打印服务。- Android平台需确保应用拥有打印权限,iOS平台无需额外权限配置。
内容的提问来源于stack exchange,提问作者Najeeb
相关产品推荐
相关产品推荐

