如何在Cocoa、Swift中设置打印?

5

我已经为NSPopover的自定义NSView创建了打印功能,通过在mainController中将以下操作分配给该NSView的按钮:

@IBOutlet var plasmidMapIBOutlet: PlasmidMapView!

@IBAction func actionPrintfMap(sender: AnyObject)
{
    plasmidMapIBOutlet.print(sender)
}

它正在工作,但打印窗口没有纸张大小方向选项,请参见下面的截图。 enter image description here
  1. 我该怎么做才能在打印窗口中获得这些选项?
  2. 还有,如何使NSView适合可打印区域?现在它不适合。

我已经找出了一些要点,但并不完全清楚。所以,我可以通过以下代码设置打印:

 @IBAction func actionPrintMap(sender: AnyObject)
 {
    let printInfo = NSPrintInfo.sharedPrintInfo()
    let operation: NSPrintOperation = NSPrintOperation(view: plasmidMapIBOutlet, printInfo: printInfo)
    operation.printPanel.options = NSPrintPanelOptions.ShowsPaperSize
    operation.printPanel.options = NSPrintPanelOptions.ShowsOrientation
    operation.runOperation()

    //plasmidMapIBOutlet.print(sender)
 }

但是,我仍然有问题。从上面的代码中,我只能获取方向(最后一个ShowsOrientation),而不能同时获取纸张大小和方向。我该如何处理ShowsPaperSize和ShowsOrientation?


你有读过Mac打印编程指南吗? - Willeke
@Willeke 是的,我已经更新了问题。现在我可以有其中一个,但不能同时拥有ShowsPaperSize和ShowsOrientation选项。我怎样才能同时拥有两者? - VYT
2个回答

3
最终,我找到了一个简单易懂的答案,但这并不是从苹果文档中很明显看出来的。
    operation.printPanel.options.insert(NSPrintPanelOptions.showsPaperSize)
    operation.printPanel.options.insert(NSPrintPanelOptions.showsOrientation)

1
最初发布的代码中存在的问题是options被赋值了两次,因此第一次赋值的ShowsPaperSizeShowsOrientation的值覆盖了。这就是为什么你只能在对话框中看到ShowsOrientation选项。
通过使用多个insert操作,您可以每次添加选项而不是覆盖它们。您也可以用以下方式来完成,我认为更易读:
operation.printPanel.options.insert([.showsPaperSize, .showsOrientation])

最后,它也可以用于“设置”选项,通过将现有选项作为第一个数组值提供,实现追加的效果:
operation.printPanel.options = [
    operation.printPanel.options,
    .showsPaperSize,
    .showsOrientation
]

(第一个数组元素operation.printPanel.options表示旧选项在新选项列表中提供。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接