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

Xamarin C# iOS应用:自定义UIPrintInteractionController的ChooseCutterBehavior

搞定Xamarin iOS小票打印机自定义切纸行为的方法

嘿,我来帮你解决这个切纸行为的问题!既然你已经有能正常运行的打印代码,那调整切纸行为其实就是对UIPrintInteractionController的属性做针对性设置,下面一步步给你讲清楚:

先确认打印机支持切纸功能

不是所有小票打印机都支持自定义切纸,所以第一步得先判断当前选中的打印机是否具备这个能力:

var printController = UIPrintInteractionController.SharedPrintController;
var selectedPrinter = printController.SelectedPrinter;

if (selectedPrinter != null && selectedPrinter.SupportsCutter)
{
    // 打印机支持切纸,接下来可以设置自定义行为
}
else
{
    // 打印机不支持切纸,只能用默认逻辑或者提示用户
}

自定义切纸行为的核心设置

ChooseCutterBehavior属性接受UIPrintCutterBehavior枚举值,你可以根据需求选择对应的选项:

  • UIPrintCutterBehavior.Default:使用打印机默认切纸逻辑
  • UIPrintCutterBehavior.CutAfterEachPage:每打印完一页就切纸
  • UIPrintCutterBehavior.CutAfterEachJob:整个打印任务完成后一次性切纸
  • UIPrintCutterBehavior.DoNotCut:完全不执行切纸操作

设置代码示例:

// 先判断目标行为是否被打印机支持(避免设置无效值)
var desiredBehavior = UIPrintCutterBehavior.CutAfterEachJob;
if (selectedPrinter.SupportsCutterBehavior(desiredBehavior))
{
    printController.ChooseCutterBehavior = desiredBehavior;
}
else
{
    // 回退到默认行为
    printController.ChooseCutterBehavior = UIPrintCutterBehavior.Default;
}

结合HTML打印的完整流程

把切纸设置和你现有的HTML打印代码整合起来,大概是这样:

// 1. 配置打印基础信息
var printInfo = UIPrintInfo.PrintInfo;
printInfo.OutputType = UIPrintInfoOutputType.General; // 小票打印机可根据实际调整为Photo/Grayscale
printInfo.JobName = "订单小票打印";

// 2. 初始化打印控制器
var printController = UIPrintInteractionController.SharedPrintController;
printController.PrintInfo = printInfo;

// 3. 设置HTML打印格式化器(你的原有代码部分)
var htmlContent = "<html><body><div style='width: 50mm; padding: 10px;'>" +
                  "<h3>XX奶茶店订单</h3>" +
                  "<p>订单号:NO.20240520001</p>" +
                  "<p>商品:珍珠奶茶 x1</p>" +
                  "<p>金额:¥18.00</p>" +
                  "</div></body></html>";
var htmlFormatter = new UIMarkupTextPrintFormatter(htmlContent);
htmlFormatter.ContentInsets = new UIEdgeInsets(15, 15, 15, 15); // 适配小票宽度调整边距
printController.PrintFormatter = htmlFormatter;

// 4. 设置自定义切纸行为
if (printController.SelectedPrinter != null && printController.SelectedPrinter.SupportsCutter)
{
    var targetBehavior = UIPrintCutterBehavior.CutAfterEachJob;
    if (printController.SelectedPrinter.SupportsCutterBehavior(targetBehavior))
    {
        printController.ChooseCutterBehavior = targetBehavior;
    }
}

// 5. 启动打印界面
printController.Present(true, (controller, isCompleted, error) =>
{
    if (!isCompleted && error != null)
    {
        Console.WriteLine($"打印失败:{error.LocalizedDescription}");
    }
});

额外注意事项

  • 部分蓝牙小票打印机需要提前配对连接,确保SelectedPrinter不为空
  • 不同打印机对UIPrintInfoOutputType的支持可能有差异,若打印格式异常可以尝试切换General/Photo类型
  • 如果想让用户手动选择切纸行为,可以开启printController.ShowsPaperSelectionForLoadedPapers = true,但前提是打印机支持该交互

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:27