PrinterToPrint 不显示打印作业进度对话框
PrinterToPrint without showing the print job Progress dialog
我在 Xamarin 中使用 iOs 默认 PrinterToPrint 进行打印,但没有显示选择打印机的对话框,但它也显示了一个对话框,上面写着打印到 [PRINTER NAME]。无论如何也可以隐藏对话框。喜欢完整的静音打印功能吗?
我不太可能,但我看到一些应用程序可以做到这一点,但我不确定它们是否使用相同的功能。
提前致谢。
更新:
UIPrinterPickerController
来自 UIKit
,因此无法将“打印”进程推到后台并离开主 UI 线程。
在当前 UIPrintInteractionController.PrintToPrinter
实现中(目前高达 iOS 10.3 B4)没有公开的方法来禁用打印进度(连接、准备等...)alart/dialog(带取消按钮)或修改其外观。
此接口是使用 AirPrint
的高级包装器,因此在较低级别使用 Internet 打印协议 (IPP) 来执行实际打印、打印机上的作业队列监控等...IPP 当前不是在 iOS...
中公开为公开可用的框架
允许后台打印的程序未使用 UIPrintInteractionController
进行打印。 大多数确实使用UIPrinterPickerController
从用户那里获得UIPrinter
选择,但随后使用UIPrinter.Url.AbsoluteUrl
通过[直接与打印机“对话” =44=] Post/Get。根据所使用的打印机,与 IPP 相比,基于 TCP 的套接字也是一种选择,甚至 USB/serial 用于直接连接的打印机。
回复:https://en.wikipedia.org/wiki/Internet_Printing_Protocol
原文:
选择打印机:
if (allowUserToSelectDifferentPrinter || printerUrl == null)
{
UIPrinter uiPrinter = printerUrl != null ? null as UIPrinter : UIPrinter.FromUrl(new NSUrl(printerUrl));
var uiPrinterPickerController = UIPrinterPickerController.FromPrinter(uiPrinter);
uiPrinterPickerController.Present(true, (printerPickerController, userDidSelect, error) =>
{
if (userDidSelect)
{
uiPrinter = uiPrinterPickerController?.SelectedPrinter;
printerUrl = uiPrinter.Url.AbsoluteUrl.ToString();
Console.WriteLine($"Save this UIPrinter's Url string for later use: {printerUrl}");
}
});
}
使用 UIPrintInteractionController
和现有的 UIPrinter
进行打印:
if (printerUrl != null)
{
// re-create a UIPrinter from a saved NSUrl string
var uiPrinter = UIPrinter.FromUrl(new NSUrl(printerUrl));
var printer = UIPrintInteractionController.SharedPrintController;
printer.ShowsPageRange = false;
printer.ShowsNumberOfCopies = false;
printer.ShowsPaperSelectionForLoadedPapers = false;
var printInfo = UIPrintInfo.PrintInfo;
printInfo.OutputType = UIPrintInfoOutputType.General;
printInfo.JobName = "Whosebug Print Job";
var textFormatter = new UISimpleTextPrintFormatter("Whosebug Rocks")
{
StartPage = 0,
ContentInsets = new UIEdgeInsets(72, 72, 72, 72),
MaximumContentWidth = 6 * 72,
};
printer.Delegate = new PrintInteractionControllerDelegate();
printer.PrintFormatter = textFormatter;
printer.PrintToPrinter(uiPrinter, (printInteractionController, completed, error) =>
{
if ((completed && error != null))
{
Console.WriteLine($"Print Error: {error.Code}:{error.Description}");
PresentViewController(
UIAlertController.Create("Print Error", "Code: {error.Code} Description: {error.Description}", UIAlertControllerStyle.ActionSheet),
true, () => { });
}
printInfo?.Dispose();
uiPrinter?.Dispose();
uiPrinter.
});
}
else
{
Console.WriteLine("User has not selected a printer...printing disabled");
}
我知道这是一个有点老的线程,但我一直在为我的一位客户在 iOS 中实现静默打印而苦苦挣扎,我终于找到了一个非常容易实现的可接受的解决方案。
如已接受的答案中所述,无法摆脱显示打印进度的弹出窗口。然而,有一种方法可以隐藏它。您只需将键 window 的 UIWindowLevel 更改为 UIWindowLevel.Alert + 100。这将保证您当前的 window 将显示在任何警报视图上方。
不过要小心,正如我提到的,它会在更改级别后显示在任何警报视图上。幸运的是,您可以将此级别切换回 "Normal" 以获得原始行为。
所以回顾一下我的解决方案。我使用 UIPrintInteractionController.PrintToPrinter 来直接打印到我使用 UIPrinter.FromUrl 创建的打印机对象(顺便说一句,这是 Xamarin.iOS 代码)。在这样做之前,我将 window 级别调整为警报 + 100,打印完成后,我将 window 级别重置为 "Normal"。现在,我的打印过程没有向用户提供任何视觉反馈。
希望这对某人有所帮助!
我在 Xamarin 中使用 iOs 默认 PrinterToPrint 进行打印,但没有显示选择打印机的对话框,但它也显示了一个对话框,上面写着打印到 [PRINTER NAME]。无论如何也可以隐藏对话框。喜欢完整的静音打印功能吗?
我不太可能,但我看到一些应用程序可以做到这一点,但我不确定它们是否使用相同的功能。
提前致谢。
更新:
UIPrinterPickerController
来自 UIKit
,因此无法将“打印”进程推到后台并离开主 UI 线程。
在当前 UIPrintInteractionController.PrintToPrinter
实现中(目前高达 iOS 10.3 B4)没有公开的方法来禁用打印进度(连接、准备等...)alart/dialog(带取消按钮)或修改其外观。
此接口是使用 AirPrint
的高级包装器,因此在较低级别使用 Internet 打印协议 (IPP) 来执行实际打印、打印机上的作业队列监控等...IPP 当前不是在 iOS...
允许后台打印的程序未使用 UIPrintInteractionController
进行打印。 大多数确实使用UIPrinterPickerController
从用户那里获得UIPrinter
选择,但随后使用UIPrinter.Url.AbsoluteUrl
通过[直接与打印机“对话” =44=] Post/Get。根据所使用的打印机,与 IPP 相比,基于 TCP 的套接字也是一种选择,甚至 USB/serial 用于直接连接的打印机。
回复:https://en.wikipedia.org/wiki/Internet_Printing_Protocol
原文:
选择打印机:
if (allowUserToSelectDifferentPrinter || printerUrl == null)
{
UIPrinter uiPrinter = printerUrl != null ? null as UIPrinter : UIPrinter.FromUrl(new NSUrl(printerUrl));
var uiPrinterPickerController = UIPrinterPickerController.FromPrinter(uiPrinter);
uiPrinterPickerController.Present(true, (printerPickerController, userDidSelect, error) =>
{
if (userDidSelect)
{
uiPrinter = uiPrinterPickerController?.SelectedPrinter;
printerUrl = uiPrinter.Url.AbsoluteUrl.ToString();
Console.WriteLine($"Save this UIPrinter's Url string for later use: {printerUrl}");
}
});
}
使用 UIPrintInteractionController
和现有的 UIPrinter
进行打印:
if (printerUrl != null)
{
// re-create a UIPrinter from a saved NSUrl string
var uiPrinter = UIPrinter.FromUrl(new NSUrl(printerUrl));
var printer = UIPrintInteractionController.SharedPrintController;
printer.ShowsPageRange = false;
printer.ShowsNumberOfCopies = false;
printer.ShowsPaperSelectionForLoadedPapers = false;
var printInfo = UIPrintInfo.PrintInfo;
printInfo.OutputType = UIPrintInfoOutputType.General;
printInfo.JobName = "Whosebug Print Job";
var textFormatter = new UISimpleTextPrintFormatter("Whosebug Rocks")
{
StartPage = 0,
ContentInsets = new UIEdgeInsets(72, 72, 72, 72),
MaximumContentWidth = 6 * 72,
};
printer.Delegate = new PrintInteractionControllerDelegate();
printer.PrintFormatter = textFormatter;
printer.PrintToPrinter(uiPrinter, (printInteractionController, completed, error) =>
{
if ((completed && error != null))
{
Console.WriteLine($"Print Error: {error.Code}:{error.Description}");
PresentViewController(
UIAlertController.Create("Print Error", "Code: {error.Code} Description: {error.Description}", UIAlertControllerStyle.ActionSheet),
true, () => { });
}
printInfo?.Dispose();
uiPrinter?.Dispose();
uiPrinter.
});
}
else
{
Console.WriteLine("User has not selected a printer...printing disabled");
}
我知道这是一个有点老的线程,但我一直在为我的一位客户在 iOS 中实现静默打印而苦苦挣扎,我终于找到了一个非常容易实现的可接受的解决方案。
如已接受的答案中所述,无法摆脱显示打印进度的弹出窗口。然而,有一种方法可以隐藏它。您只需将键 window 的 UIWindowLevel 更改为 UIWindowLevel.Alert + 100。这将保证您当前的 window 将显示在任何警报视图上方。
不过要小心,正如我提到的,它会在更改级别后显示在任何警报视图上。幸运的是,您可以将此级别切换回 "Normal" 以获得原始行为。
所以回顾一下我的解决方案。我使用 UIPrintInteractionController.PrintToPrinter 来直接打印到我使用 UIPrinter.FromUrl 创建的打印机对象(顺便说一句,这是 Xamarin.iOS 代码)。在这样做之前,我将 window 级别调整为警报 + 100,打印完成后,我将 window 级别重置为 "Normal"。现在,我的打印过程没有向用户提供任何视觉反馈。
希望这对某人有所帮助!