在 iOS 上使用 Airprint 进行打印。我编写了代码来搜索打印机并在选择后立即打印,而不使用默认的打印 UI。
但是问题出现了。问题是
pdf
是双面打印的,不是单面的。
我查找了
UIPrintInfo
的选项,发现duplex
的值为none
。我设置了选项 printInfo.duplex = .none
,但它仍然双面打印。
我想知道如何打印单面而不是双面。我附上下面的代码。
class PrinterSearchManager: NSObject, UIPrinterPickerControllerDelegate {
var selectedPrinter: UIPrinter?
func searchAndConnectToPrinter(completion: @escaping (Bool, String?) -> Void) {
let printerPickerController = UIPrinterPickerController(initiallySelectedPrinter: nil)
printerPickerController.delegate = self
printerPickerController.present(animated: true) { (controller, userDidSelect, error) in
if userDidSelect, let printer = controller.selectedPrinter {
self.selectedPrinter = printer
completion(true, nil)
} else {
completion(false, "No printer selected.")
}
}
}
private func connectToPrinter(_ printer: UIPrinter, completion: @escaping (Bool, String?) -> Void) {
printer.contactPrinter { available in
if available {
completion(true, "Success to connect to the printer.")
} else {
completion(false, "Failed to connect to the printer.")
}
}
}
func printPDF(filePath: String, completion: @escaping (Bool, String?) -> Void) {
guard let printer = selectedPrinter else {
completion(false, "No printer selected.")
return
}
if let cachePath = getCacheDirectory() {
let fileURL = cachePath.appendingPathComponent("test.pdf")
print("PDF file URL: \(fileURL.path)")
let printInfo = UIPrintInfo.printInfo()
printInfo.outputType = .general
printInfo.jobName = "PDF Print Job"
printInfo.duplex = .none
printInfo.orientation = .portrait
let printController = UIPrintInteractionController.shared
printController.printInfo = printInfo
printController.printingItem = fileURL
printController.showsNumberOfCopies = true
print(" printController.print completed : \(printController.printInfo?.duplex.rawValue)"); //0
printController.print(to: printer, completionHandler: { (controller, completed, error) in
if completed {
print(" printController.print completed : \(printController.printInfo?.duplex.rawValue)"); //1
completion(true, nil)
} else {
completion(false, error?.localizedDescription)
}
})
} else {
print("Failed to get cache directory")
}
}
func printerPickerController(_ printerPickerController: UIPrinterPickerController, didSelect printer: UIPrinter) {
print("Printer selected: \(printer.displayName)")
}
func getCacheDirectory() -> URL? {
let fileManager = FileManager.default
if let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first {
return cacheDirectory
} else {
return nil
}
}
}
//call
let printerManager = PrinterSearchManager()
printerManager.searchAndConnectToPrinter { success, error in
if success {
printerManager.printPDF(filePath: "just test") { success, error in
if success {
print("PDF successfully printed!")
} else {
print("Failed to print PDF: \(error ?? "Unknown error")")
}
}
} else {
print("Printer selection failed: \(error ?? "Unknown error")")
}
}
问题解决了。
这不是代码问题。如果正常搜索并选择打印机,连接后将继续打印。之所以要双面打印,是因为默认打印设置中启用了双面。