如何在iOS Air Printer上强制单面打印

问题描述 投票:0回答:1

在 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")")
            }
        }
ios swift
1个回答
0
投票

问题解决了。

这不是代码问题。如果正常搜索并选择打印机,连接后将继续打印。之所以要双面打印,是因为默认打印设置中启用了双面。

© www.soinside.com 2019 - 2024. All rights reserved.