我正在尝试打印文档.该文档是一个NS
ImageReps数组,或一个NSPDFImageRep数组,它有多个页面.我无法弄清楚如何使用NSPrintOperation类来打印它.
NSPrintOperation似乎需要NSView才能打印.我是否需要在计算位置手动将每个图像添加到视图中,然后让它进行分页?这似乎不符合Cocoa的精神……是否有一些我缺少的技术?
解决方法
尽管有一个公认的答案,它并没有真正回答基本问题,只是给出一个解决方法.
我只是遇到了类似的问题(我有一个对象数组,每个对象都由同一个NSView子类呈现,每页一个).这就是我如何解决它,没有巴洛克式的废话创建一个包含所有页面的巨大视图……
1)我们有一个NSView子类,它有一个与之关联的模型(在你的情况下是NSImage,在我的情况下是ModelData)
class BaseView: NSView { var modelData: ModelData /* Whatever your view needs to draw */ //... }
2)我们在文档控制器中有一个数组var模型:[ModelData].
3)创建一个新的子类,它将成为打印机视图.
class PrinterView: BaseView { var pageIndex: Int = 1 var modelArray: [ModelData] init(frame: NSRect,models: [ModelData]) { self.modelArray = models super.init(frame: frame) } required init?(coder: NSCoder) { fatalError("invalid initializer") } override func knowsPageRange(_ range: NSRangePointer) -> Bool { range.pointee.location = 1 range.pointee.length = self.modelArray.count return true } override func rectForPage(_ page: Int) -> NSRect { self.pageIndex = page return self.bounds } override func draw(_ dirtyRect: NSRect) { self.model = self.modelArray[self.page - 1] // Pages are 1,not 0,based super.draw(dirtyRect) } } // That's it! That's all...
4)在文档控制器中执行此操作:
override func printOperation(withSettings printSettings: [String : Any]) throws -> NSPrintOperation { self.printInfo.horizontalPagination = .fitPagination self.printInfo.verticalPagination = .clipPagination let printView = PrinterView(size: self.printInfo.paperSize,models: self.models) return NSPrintOperation(view: printView,printInfo: self.printInfo) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。