Je développe une application qui nécessite de générer et d’imprimer directement les laissez-passer visiteurs à partir d’un iPad via AirPrint.
J'ai cherché partout pour savoir comment imprimer une vue, mais je ne trouve que comment imprimer du texte, WebKit et mapKit.
Est-il possible d'imprimer une vue entière? Sinon, quelle serait la bonne solution pour imprimer un laissez-passer pour visiteur qui sera un texte brut, des cases et une photo. Merci.
J'ai trouvé la réponse à ma question en modifiant le code trouvé ici: Contenu d'AirPrint d'un UIView
//create an extension to covert the view to an image
extension UIView {
func toImage() -> UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale)
drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
//In your view controller
@IBAction func printButton(sender: AnyObject) {
let printInfo = UIPrintInfo(dictionary:nil)
printInfo.outputType = UIPrintInfoOutputType.General
printInfo.jobName = "My Print Job"
// Set up print controller
let printController = UIPrintInteractionController.sharedPrintController()
printController.printInfo = printInfo
// Assign a UIImage version of my UIView as a printing iten
printController.printingItem = self.view.toImage()
// If you want to specify a printer
guard let printerURL = URL(string: "Your printer URL here, e.g. ipps://HPDC4A3E0DE24A.local.:443/ipp/print") else { return }
guard let currentPrinter = UIPrinter(url: printerURL) else { return }
printController.print(to: currentPrinter, completionHandler: nil)
// Do it
printController.presentFromRect(self.view.frame, inView: self.view, animated: true, completionHandler: nil)
}
Je pense que vous devez rechercher un exemple de code d'impression de photo avec Swift: https://developer.Apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html
Quelle est exactement votre vue, imageView ou UIView? Si vous êtes intéressé par imageView ou UIImage, l’échantillon Print Photo d’Apple est fait pour vous. Si votre sujet est UIView, vous pouvez créer un contexte pdf à partir de view.layers et l'envoyer à AirPrint tel que WebKit, texte ou vous pouvez imprimer pour créer des données pdf.
La meilleure solution est de créer un fichier PDF ici pour Swift Générer PDF avec Swift
Le fichier pdf à imprimer est destiné à la mise en œuvre de Swift:
var pdfLoc = NSURL(fileURLWithPath:yourPdfFilePath)
let printController = UIPrintInteractionController.sharedPrintController()!
let printInfo = UIPrintInfo(dictionary:nil)!
printInfo.outputType = UIPrintInfoOutputType.General
printInfo.jobName = "print Job"
printController.printInfo = printInfo
printController.printingItem = pdfLoc
printController.presentFromBarButtonItem(printButton, animated: true, completionHandler: nil)
Hier dans Swift 3.x
func prt() {
let printInfo = UIPrintInfo(dictionary:nil)
printInfo.outputType = UIPrintInfoOutputType.general
printInfo.jobName = "My Print Job"
// Set up print controller
let printController = UIPrintInteractionController.shared
printController.printInfo = printInfo
// Assign a UIImage version of my UIView as a printing iten
printController.printingItem = self.view.toImage()
// Do it
printController.present(from: self.view.frame, in: self.view, animated: true, completionHandler: nil)
}
}
extension UIView {
func toImage() -> UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
drawHierarchy(in: self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
Swift 4:
let printInfo = UIPrintInfo(dictionary:nil)
printInfo.outputType = UIPrintInfo.OutputType.general
printInfo.jobName = "iOS app printing"
let printController = UIPrintInteractionController.shared
printController.printInfo = printInfo
printController.printingItem = UIImage.imageFromView(self.view) // your view here
printController.present(from: self.view.frame, in: self.view, animated: true, completionHandler: nil)
extension UIImage {
/// Get image from given view
///
/// - Parameter view: the view
/// - Returns: UIImage
public class func imageFromView(view: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0)
view.drawHierarchy(in: view.bounds, afterScreenUpdates: false)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
}