2015-12-10 9 views
9

Ich entwickle eine App, die Besucherausweise generiert und direkt von einem iPad über AirPrint drucken lässt.Drucken der Ansicht in iOS mit Swift

Ich habe überall gesucht, um herauszufinden, wie man eine Ansicht druckt, aber ich kann nur finden, wie man Text, webKit und mapKit druckt.

Gibt es eine Möglichkeit, eine ganze Ansicht zu drucken? Wenn nicht, was wäre eine gute Lösung, um einen Besucherausweis zu drucken, der einfacher Text, Boxen und ein Foto sein wird. Vielen Dank.

+0

Leider meine alte ipad1 ließ mich keinen Kommentar nur eine Antwort hinzuzufügen. Mein Kommentar war: Didvyou finden eine Lösung? Ich suche das gleiche auch mit einem qr code? Zuerst benutze ich gerne meine iPad App als Eingabegerät und lasse ein lokales PC Netzwerk die Daten nachschlagen und das Badge/Pass ausdrucken? Ich denke, ein schnellerer Weg wäre, das Drucklayout in meiner App basierend auf den Datenbankdaten zu erstellen. Vielleicht ein Pass/Badge-PDF mit einem QRCode erstellen und ausdrucken? – alex

Antwort

6

ich die Antwort auf meine Frage gefunden haben, indem Sie den Code zu modifizieren gefunden hier: 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

Ich glaube, Sie drucken Foto Beispielcode mit Swift suchen: https://developer.apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html

Was genau ist Ihre Ansicht, Imageview oder UIView? Wenn Sie sich für imageView oder UIImage interessieren, ist Print Photo sample von Apple genau das Richtige für Sie. Wenn Ihr Thema UIView ist, können Sie einen PDF-Kontext von view.layers erstellen und an AirPrint-Funktionen wie WebKit senden, Text oder Sie können drucken, um PDF-Daten zu erstellen.

Die beste Lösung ist als pdf-Datei in für Generate PDF with Swift

drucken PDF-Datei swift hier erstellen ist für eine rasche Umsetzung:

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

Wenn diese Frage mit [tag: swift] getaggt ist, warum würden Sie eine Objective-C-Implementierung bereitstellen? – JAL

+0

Weil ich Swift sehr gut kenne, habe ich meine Antwort bearbeitet. – furkan

+0

Danke, es wäre wahrscheinlich eine UIView. Ich habe mir die obigen Lösungen angeschaut, aber ich bin mir nicht sicher, ob die PDF-Option die beste Wahl ist. Ich denke, das Beste wäre, den Besucher-HTML-Pass zu erstellen und dann die Web-Ansicht zu drucken. Ich werde dich wissen lassen, wie es mir geht. –

1

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