I want to use the AirPrint API, which is a standard OS printing function, programmatically on an iOS application to print directly to a printer by specifying single-sided printing instead of double-sided printing for the first print after the OS is initialised.
〇Verification environment
・Device: iPad 9 generation
・OS:OS16.6
・Printer model: EPSON PX-S730 / Brother MFC-J7300CDW / Canon G5030 / EPSON PX-M791FT
※All printers used for verification support AirPrint and are capable of duplex printing.
〇Issue
The duplex printing option can be specified from the program using the AirPrint API property "duplex",
However, when printing is executed from the program, the specified print option "duplex printing" is not reflected in the AirPrint API.
〇Verification results
Installed the developed print verification app on the device in factory default state, and executed the print process from the app to the printer.
(1st time) Set the property "duplex printing" = duplex or single-sided in the AirPrint API of iOS → In both cases, printing was performed on both sides.
(2nd and subsequent times) Set the property "duplex printing" = duplex or single-sided in the AirPrint API of iOS → In both cases, printing is done on one side.
〇Source Code
The print verification application we developed uses the UIPrintInteractionController class in Swift to specify the printing options for duplex printing.
We believe we can specify this by setting "info.duplex = UIPrintInfo.Duplex.none" in the following source code and adding it to printInfo.
func buttonClick(_ sender: Any) {
let printController = UIPrintInteractionController.shared
let printInfo = UIPrintInfo(dictionary: nil)
printInfo.jobName = "PrintJob from PrintTestApp"
// color
printInfo.outputType = UIPrintInfo.OutputType.general
// duplex mode for the print
printInfo.duplex = UIPrintInfo.Duplex.none // set the single side option
printController.printInfo = printInfo
// PDF printing in project folder
printController.printingItem = Bundle.main.url(forResource: "sample", withExtension: "pdf")!
// printer settings
let printer = UIPrinter(url: URL(string: "ipps://XXXXXXX/ipp/print")!)
// direct printing
printController.print(to: printer, completionHandler: {
controller, completed, error in
guard error == nil else {
return
}
})
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm using UIPrintInteractionController(AirPrint) to print documents in my swift application. I was able to print the documents using my application, but all of them are printing in one-sided. Now i want to add a double-sided printing as an option to my application. After some research i found that it can be implement by adding info.duplex = UIPrintInfo.Duplex.longEdge to printInfo.
I tried it using the below code.
private var printController = UIPrintInteractionController.shared
let info = UIPrintInfo.printInfo()
info.duplex = UIPrintInfo.Duplex.longEdge <<<<<<
info.jobName = "XXXPrint"
info.orientation = .portrait
printController.printInfo = info
printController.print(to: printer, completionHandler: { [self]
controller, completed, error in
if(error != nil){
print("successfully")
}else{
print("Printing error: \(error.localizedDescription)")
}
}
But whether i set it in the code and run my application it is printing the pages by one-sided.
So if some one can guide me to double-sided printing workable solution highly appreciated!!
I would like to know what errors can be handled by the UIPrintInteractionController.CompletionHandler.According to the UIKit documentation, four constants were defined for UIPrintError.Code, but that is very rough and I don't know which error codes are returned at specific times.
When I print from my iPad using AirPrint, can I get detailed errors such as out of ink, paper jam, or insufficient paper?
Also, is there another way to get and handle print errors other than using the UIPrintInteractionController.CompletionHandler?
I have deployed a angular site with nginx server in GKE and set the SSL authentication. I installed the client certificate using Mobileiron Cloud MDM in my ipad. Then i was able to access and validate the certificate using Safari . But when i trying to do the same thing using my application WkWebView it always giving me the "400 Bad Request" error. After some search i realize that we cannot acces the certificates which installed in the Apple Key chain and it they can be only access by applications Safari or apple Mail app. As a solution for this problem then i set the client certifcate inside App Bundle and was able to do the authentication by importing it using "SecPKCS12Import" and do the authentication.
let securityError = SecPKCS12Import(data as NSData,
[ kSecImportExportPassphrase as String : password ] as CFDictionary,
&_items);
Now WKwebView is loading only if authentication is correct. But for this methos i need to upload the client certificate to my App Bundle.
So i would like to know, is there a way to do the SSL authentication in WKWebview without bundeling the client certificate to app bundle. I would like a way that i can deploy it in a remote way like Mobileiron Cloud MDM(i already have the subscription so there is no probles accesing all Mobileriron services.) and access that certifcate to authenticate in the WKWebview url loading.
We are using AVFoundation to create a Barcode/Qrcode reader.In there we created a Qr/Barcode detection square area to show in the middle of the ipad/iphone screen with red color boarder and we were able to read
below types Barcode/Qrcode in ios 15.4 within that detection area.
Below are the barcode types that we read.
private let supportedCodeTypes = [
AVMetadataObject.ObjectType.codabar, AVMetadataObject.ObjectType.qr, AVMetadataObject.ObjectType.upce,
AVMetadataObject.ObjectType.code39Mod43, AVMetadataObject.ObjectType.code39, AVMetadataObject.ObjectType.code93,
AVMetadataObject.ObjectType.code128,
AVMetadataObject.ObjectType.ean8,
AVMetadataObject.ObjectType.ean13,
AVMetadataObject.ObjectType.aztec, AVMetadataObject.ObjectType.pdf417, AVMetadataObject.ObjectType.itf14,
AVMetadataObject.ObjectType.dataMatrix,
AVMetadataObject.ObjectType.interleaved2of5]
But when we update our source to iOS 16, only "AVMetadataObject.ObjectType.codabar" type barcode cannot read inside the detection area. All other barcode can be detect and read inside detection area. if we expand detection area to full screen "AVMetadataObject.ObjectType.codabar" can be readed.
So is there a specific reason for this scenario or is it a problem comes with iOS 16?