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)}总结
以上是内存溢出为你收集整理的objective-c – 打印NSDocument全部内容,希望文章能够帮你解决objective-c – 打印NSDocument所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)