2015-12-10 27 views
9

Pracuję nad aplikacją, która wymaga generowania wydruków i drukowania bezpośrednio z iPada przez AirPrint.Drukowanie widoku w iOS przy użyciu Swift

Szukałem wszędzie, aby dowiedzieć się, jak wydrukować widok, ale mogę tylko znaleźć sposób drukowania tekstu, webKit i mapKit.

Czy istnieje sposób drukowania całego widoku? Jeśli nie, to jakie byłoby dobre rozwiązanie, aby wydrukować kartę gościa, która będzie zwykłym tekstem, pudełkami i fotografią. Dzięki.

+0

Niestety mój stary IPAD1 nie pozwolił mi dodać komentarz tylko odpowiedź. Mój komentarz brzmiał: Didvyou znaleźć rozwiązanie? Szukam tego samego również z kodem QR? Na początku lubię używać mojej aplikacji ipad jako urządzenia wejściowego i mieć lokalną sieć komputerową, która wyszukuje dane i drukuje znaczek/przepustkę? Myślę, że szybszym sposobem byłoby stworzenie układu wydruku w mojej aplikacji na podstawie danych z bazy danych? Może utworzyć hasło/znaczek pdf z qrcode i wydrukować to? – alex

Odpowiedz

6

znalazłem odpowiedź na moje pytanie, modyfikując kod znaleziony tutaj: 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

Chyba trzeba patrzeć drukowania zdjęć z przykładowy kod SWIFT: https://developer.apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html

Czym dokładnie jest twój widok, ImageView lub UIView? Jeśli interesuje Cię imageView lub UIImage, przykładowy wydruk zdjęć z firmy Apple jest dla Ciebie. Jeśli Twój temat to UIView, możesz utworzyć kontekst pdf z view.layers i wysłać do AirPrint func, takich jak WebKit, tekst lub możesz drukować, aby utworzyć dane w formacie pdf.

Najlepszym rozwiązaniem jest utworzyć plik PDF jest tutaj szybkiej Generate PDF with Swift

druku plik PDF jest do szybkiej realizacji:

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

Jeśli to pytanie zostało oznaczone tagiem [tag: swift], dlaczego miałbyś zastosować implementację Objective-C? – JAL

+0

Ponieważ nie jestem zaznajomiony z szybko, bardzo dobrze, redagowałem moją odpowiedź. – furkan

+0

Dzięki, prawdopodobnie będzie to UIView. Spojrzałem na powyższe rozwiązania, ale nie jestem pewien, czy opcja PDF jest najlepsza. Myślę, że najlepszą rzeczą do zrobienia byłoby utworzenie kodu HTML odwiedzającego, a następnie wydrukowanie widoku internetowego. Dam ci znać, jak sobie radzę. –

1

Hier w 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! 
    } 
} 
Powiązane problemy