Печать представления в iOS с помощью Swift
Я разрабатываю приложение, которое требует, чтобы пропуски посетителей были сгенерированы и распечатаны непосредственно с iPad над AirPrint.
Я искал всюду, чтобы узнать, как печатать представление, но я могу только найти, как печатать текст, webKit и mapKit.
Есть ли способ печати всего представления? Если нет, то было бы хорошим решением напечатать пропуск посетителя, который будет простым текстом, коробками и фотографией. Спасибо.
Ответы
Ответ 1
Я нашел ответ на свой вопрос, изменив код, найденный здесь: AirPrint содержимое 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)
}
Ответ 2
Я думаю, вам нужно посмотреть образец кода для фотошоп с 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 для быстрого
Создать PDF с помощью 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)
Ответ 3
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!
}
}
Ответ 4
Свифт 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
}
}