2015-12-10 1 views
9

Je suis en train de développer une application qui nécessite la génération et l'impression de laissez-passer visiteurs directement à partir d'un iPad sur AirPrint.Impression de la vue dans iOS avec Swift

J'ai regardé partout pour savoir comment imprimer une vue, mais je ne peux trouver que l'impression de texte, de webKit et de mapKit.

Existe-t-il un moyen d'imprimer une vue entière? Si ce n'est pas le cas, quelle serait une bonne solution pour imprimer un laissez-passer de visiteur qui sera un texte en clair, des boîtes et une photographie. Merci.

+0

Désolé mon vieux ipad1 ne m'a pas laissé ajouter un commentaire seulement une réponse. Mon commentaire était: Avez-vous trouvé une solution? Je cherche la même chose aussi avec un code qr? Au début, j'aime utiliser mon application ipad juste comme périphérique d'entrée et avoir un réseau local PC rechercher les données et imprimer le badge/passe? Je pense qu'un moyen plus rapide serait d'avoir la mise en page d'impression créée dans mon application basée sur les données de la base de données? Peut-être créer un passe/badge pdf avec un qrcode et l'imprimer? – alex

Répondre

6

J'ai trouvé la réponse à ma question en modifiant le code trouvé ici: AirPrint contents of a 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() 

    // Do it 
    printController.presentFromRect(self.view.frame, inView: self.view, animated: true, completionHandler: nil) 
} 
3

Je pense que vous devez regarder l'exemple de code photo d'impression avec Swift: https://developer.apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html

Quelle est exactement votre point de vue, imageView ou UIView? Si vous êtes intéressé par imageView ou UIImage, l'exemple d'impression de photos d'Apple est fait pour vous. Si votre sujet est UIView, vous pouvez créer un contexte pdf à partir de view.layers et envoyer à la fonction AirPrint comme WebKit, du texte ou vous pouvez imprimer pour créer des données PDF.

La meilleure solution est de créer le fichier PDF est ici pour rapide Generate PDF with Swift

Imprimer fichier pdf est la mise en œuvre rapide:

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) 
+2

Si cette question est taguée avec [tag: swift], pourquoi offrez-vous une implémentation Objective-C? – JAL

+0

Parce que je ne connais pas très bien swift, j'ai édité ma réponse. – furkan

+0

Merci, ce serait probablement un UIView. J'ai regardé les solutions ci-dessus mais je ne suis pas sûr que l'option PDF soit la meilleure option. Je pense que la meilleure chose à faire serait de créer le code HTML du visiteur puis d'imprimer la vue web. Je vais vous laisser savoir comment je m'entends. –

1

Yesterday 3.x Swift

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! 
    } 
}