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
相关产品推荐
相关产品推荐

