Сейчас я делаю приложение для MacOS и пытаюсь поддерживать печать. Я добавил NSBox для представления страниц, которые я хочу распечатать внутри NSScrollView, поэтому иерархия выглядит следующим образом
NSScrollView
|- NSDocumentView
|- NSBox
|- NSBox
![Print Preview](https://i.stack.imgur.com/JZKvU.jpg)
В ViewController, когда пользователь нажимает на печать, я запускаю следующий код
let printOperation = NSPrintOperation(view: self.previewView, printInfo: printInfo)
if let window = self.view.window {
printOperation.runModal(for: window, delegate: self, didRun: #selector(PrintPreviewViewController.printOperationDidRun(_:success:contextInfo:)), contextInfo: nil)
}
В подклассе NSDocumentView я реализовал
override func knowsPageRange(_ range: NSRangePointer) -> Bool {
var numberOfPages = 0
for i in 0..<pages.count {
numberOfPages += pages[i].count
}
range.pointee.location = 1
range.pointee.length = numberOfPages
return true
}
override func rectForPage(_ page: Int) -> NSRect {
var pageNumber = 1
for i in 0..<pages.count {
for j in 0..<pages[i].count {
if pageNumber == page {
return pages[i][j].frame
}
pageNumber += 1
}
}
return NSRect(x: 0, y: 0, width: 300, height: 300)
}
Когда я бегу, я вижу распечатанный лист, который выглядит правильно.
![Print sheet](https://i.stack.imgur.com/dUkDN.jpg)
Но когда я, наконец, подтверждаю печать, я получаю эти ошибки в консоли и чистый лист.
CGContextGetCTM: invalid context 0x0
CGContextTranslateCTM: invalid context 0x0
Я не знаю, что это значит, так как все отображается правильно в NSScrollView и даже в предварительном просмотре.
Я попытался сузить проблему, я попытался сделать пустой проект с одним NSBox внутри NSScrollView, и у меня возникла та же проблема. Я попытался изменить размер NSRect Bering, возвращенный в rectForPage (), но ничего не работает. У меня нет идей.
Спасибо всем заранее.