You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Maui Windows10应用中打印简单文本?

在.NET Maui里实现文本打印功能

方法一:用.NET Maui跨平台打印API(推荐)

.NET Maui有专门的跨平台打印能力,先给项目装上Microsoft.Maui.Graphics.Printing这个NuGet包,再按下面步骤实现:

  1. 安装依赖包
    在项目中安装Microsoft.Maui.Graphics.Printing NuGet包。

  2. 编写打印文本的方法
    把要打印的字符串转换成可打印的文档,直接生成带文本的打印页面即可:

    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);
        }
    }
    
  3. 触发打印
    在按钮点击或需要打印的逻辑中调用方法:

    private async void PrintButton_Clicked(object sender, EventArgs e)
    {
        await PrintTextAsync("这是要打印的测试文本内容!");
    }
    

方法二:基于你现有代码的Windows平台适配(仅Windows可用)

你用到的PrintManager是UWP专属API,只能在Windows平台生效,要接着你的代码完成功能,需要补全以下事件实现:

  1. 完善PrintTaskRequested事件

    private void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
    {
        var deferral = args.Request.GetDeferral();
        // 创建打印任务并关联文档源
        var printTask = args.Request.CreatePrintTask("文本打印", sourceArgs =>
        {
            sourceArgs.SetSource(printDocSource);
            deferral.Complete();
        });
    }
    
  2. 实现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);
    }
    
  3. 启动打印UI
    在需要打印的地方调用:

    private async void StartPrint()
    {
        try
        {
            await PrintManager.ShowPrintUIAsync();
        }
        catch (Exception ex)
        {
            // 处理打印异常,比如弹窗提示用户
        }
    }
    

注意事项

  • PrintManager仅支持Windows平台,跨平台应用优先使用方法一的API,它会自动适配Android和iOS的原生打印服务。
  • Android平台需确保应用拥有打印权限,iOS平台无需额外权限配置。

内容的提问来源于stack exchange,提问作者Najeeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:55:33