2015-12-10 1 views
9

Я разрабатываю приложение, которое требует, чтобы пропуски посетителей были сгенерированы и напечатаны непосредственно с iPad над AirPrint.Печать вида в iOS с помощью Swift

Я искал всюду, чтобы узнать, как напечатать вид, но я могу только найти, как печатать текст, webKit и mapKit.

Есть ли способ распечатать весь вид? Если нет, то было бы хорошим решением напечатать пропуск посетителя, который будет простым текстом, коробками и фотографией. Благодарю.

+0

К сожалению мой старый ipad1 не позволил мне добавить комментарий только ответ. Мой комментарий: Didvyou найти решение? Я ищу то же самое с кодом qr? Сначала мне нравится использовать свое приложение ipad, как устройство ввода, и локальную компьютерную сеть искать данные и печатать значок/пропуск? Я думаю, что более быстрый способ заключается в том, чтобы макет печати, созданный в моем приложении, основывался на данных базы данных? Может быть, создать файл pass/badge pdf с qrcode и напечатать это? – alex

ответ

6

я нашел ответ на мой вопрос, изменив код найден здесь: 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

Я думаю, вы должны смотреть на печать фото образец кода с Swift: https://developer.apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html

Что именно Ваше мнение, ImageView или UIView? Если вас интересует imageView или UIImage, образец Print Photo от Apple для вас. Если ваш объект UIView, вы можете создать pdf-контекст из view.layers и отправить в AirPrint func, например WebKit, текст или вы можете распечатать для создания pdf-данных.

Лучшее решение Создать файл PDF находится здесь для быстрого Generate PDF with Swift

Печать PDF файл для быстрой реализации:

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

Если этот вопрос отмечен тегом [tag: swift], зачем вы предлагаете реализацию Objective-C? – JAL

+0

Потому что я не очень хорошо знаком с быстрым, я отредактировал свой ответ. – furkan

+0

Спасибо, это скорее всего будет UIView. Я рассмотрел вышеперечисленные решения, но я не уверен, что вариант PDF - лучший выбор. Я думаю, что лучше всего было бы создать гостевой проход HTML, а затем распечатать веб-представление. Я дам вам знать, как я продвигаюсь. –

1

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