我正在开发一个iPad/iPhone应用程序,要求我在完成交易时在网络打印机上打印收据.我已经设法在某种程度上获得了airprint功能,因为我可以正确显示UIPrintInteractionController弹出窗口,单击"打印"按钮,然后在打印机模拟器中查看结果.由于我的应用程序的要求,我希望跳过popover步骤并在关闭事务时自动打印收据.换句话说,是否可以将打印作业发送到预先指定的网络打印机而无需添加额外的按钮单击?我是否需要尝试扩展UIPrintInteractionController类?如果是这样,有没有人有这种方法的运气?
任何其他替代建议也会很棒.
场景:引导模式锁定的应用程序接受一些用户输入(名称等)并将它们打印出来.用户无法选择打印机.
我计划的解决方案是保存打印机的URL,我有以下形式:
ipp://<hostname>.local.:5001/<printername>
Run Code Online (Sandbox Code Playgroud)
要从此存储的字符串构建UIPrinter对象:
var printerURL = NSUrl.FromString(SettingsService.OptPrinterUrl);
var printer = UIPrinter.FromUrl(printerURL);
Run Code Online (Sandbox Code Playgroud)
然后我打电话给:
printer.ContactPrinter((available) => {
if (available) {
//
}
});
Run Code Online (Sandbox Code Playgroud)
要么
var printInterface = UIPrintInteractionController.SharedPrintController;
printInterface.PrintToPrinter(printer, (handler, completed, error) =>
{
if (!completed && error != null) {
UIAlertView alert = new UIAlertView("Guest Check-In App", "Print Error", null, "Ok", null);
alert.Show();
}
});
Run Code Online (Sandbox Code Playgroud)
没有积极的结果.
但是,当使用从UIPrinterPickerController返回的UIPrinter对象时(如下所示),它都可以工作.
var printerPicker = UIPrinterPickerController.FromPrinter(null);
printerPicker.PresentFromRect(new CGRect(0,0,100,100),this.View,true, delegate(UIPrinterPickerController handler, bool completed, NSError error) {
printer = printerPicker.SelectedPrinter;
});
Run Code Online (Sandbox Code Playgroud)
我甚至尝试从PrinterPicker获取UIPrinter对象,并尝试使用从PrinterPicker获取的UIPrinter对象中的url使用UIPrinter.FromUrl构建新的UIPrinter.
我只能创建一个工作的UIPrinter对象而不直接使用UIPrinterPickerController中的那个,如下所示:
var printerPicker = UIPrinterPickerController.FromPrinter(null); …Run Code Online (Sandbox Code Playgroud) 这是我的应用程序的工作流程: 用户可以从应用程序的设置页面选择默认打印机,并且每次都会直接使用该默认打印机进行打印,而无需任何打印预览对话框。
我们可以使用以下方法选择打印机UIPrinterPickerController:
let printerPicker = UIPrinterPickerController(initiallySelectedPrinter: nil)
printerPicker.present(from: CGRect(x: 0, y: 0, width: 600, height: 500), in: self, animated: true) { (printerPicker, userDidSelect, error) in
if userDidSelect {
//Here get the selected UIPrinter
let defaultPrinter = printerPicker.selectedPrinter
}
}
Run Code Online (Sandbox Code Playgroud)
获取后UIPrinter,我们不能直接将UIPrinter对象保存到UserDefaults,这不是UserDefault支持类型。
是否有任何其他选项可以保存UIPrinter到用户默认值或任何其他方式来保存默认打印机。