我有以下代码行来打印webView
内容。
let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let printOpts: NSDictionary = [NSPrintJobDisposition: NSPrintSaveJob, NSPrintSaveJob: directoryURL, NSPrintScalingFactor: 2.0]
let printInfo = NSPrintInfo(dictionary: printOpts as! [String : AnyObject])
printInfo.horizontalPagination = .autoPagination
printInfo.verticalPagination = .autoPagination
let printOperation = NSPrintOperation(view: webView.mainFrame.frameView, printInfo: printInfo)
printOperation.printPanel.options = [.showsOrientation, .showsPaperSize, .showsPreview, .showsPageSetupAccessory, .showsScaling, .showsPrintSelection]
printOperation.run()
问题是,当用户与打印操作面板交互时,它有时会导致应用程序崩溃。
如果我只是点击取消按钮,应用程序可能会崩溃。如果我尝试设置不同的比例率,它有时会崩溃。我不知道为什么应用程序会崩溃。它总是最后一行。我究竟做错了什么?感谢。
答案 0 :(得分:1)
当选项中.showsCopies
不时,打印面板代码中存在错误。它与Copies相关的子视图有一个使用后免费的bug。它将它们从视图层次结构中删除,允许它们被释放。但是,它保留了对文本字段的悬空引用,并尝试在各种情况下对其进行操作。例如,它有时会尝试将其作为第一响应者。
你基本上应该永远不要试图压制Copies字段。
答案 1 :(得分:0)
我的代码用于从OS X的URL打印pdf:
let printInfo = NSPrintInfo.shared
let manager = FileManager.default
do{
let directoryURL = try manager.url(for: .documentDirectory, in:.userDomainMask, appropriateFor:nil, create:true)
let docURL = NSURL(string:"XX.pdf", relativeTo:directoryURL)
let pdfDoc = PDFDocument.init(url: docURL! as URL)
let page = CGRect(x: 0, y: 0, width: 595.2, height: 1841.8) // A4, 72 dpi
let pdfView : PDFView = PDFView.init(frame: page)
pdfView.document = pdfDoc
let operation: NSPrintOperation = NSPrintOperation(view: pdfView, printInfo: printInfo)
operation.printPanel.options.insert(NSPrintPanel.Options.showsPaperSize)
operation.printPanel.options.insert(NSPrintPanel.Options.showsOrientation)
operation.run()
}catch{
}