如何在可可,swift中设置打印?

时间:2016-05-24 14:46:55

标签: swift cocoa printing

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

@IBOutlet var plasmidMapIBOutlet: PlasmidMapView!

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

它正常工作,但打印窗口无法选择纸张尺寸方向,请参见下面的屏幕截图。  enter image description here

  1. 如何在打印窗口中获取这些选项?
  2. 并且,如何使NSView适合可打印区域?现在它不合适。
  3. 我已经想出了一些时刻,但并不完全。所以,我可以通过以下代码设置打印

     @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),但不能同时获得PaperSize和Orientation。如何管理ShowsPaperSize和ShowsOrientation?

2 个答案:

答案 0 :(得分:3)

最后,我找到了一个简单易懂的答案,但从苹果文档来看并不是很明显。

    operation.printPanel.options.insert(NSPrintPanelOptions.showsPaperSize)
    operation.printPanel.options.insert(NSPrintPanelOptions.showsOrientation)

答案 1 :(得分:0)

最初发布的代码中的问题是options被分配了两次,因此分配的第一个值ShowsPaperSize被值ShowsOrientation覆盖。这就是为什么您仅在对话框中看到ShowsOrientation选项的原因。

通过使用多个insert操作,您正在添加选项而不是每次都覆盖。您也可以按照我认为更好的方式进行操作:

operation.printPanel.options.insert([.showsPaperSize, .showsOrientation])

最后,它还可以“设置”选项,并通过将现有选项作为第一个数组值提供,可以达到附加效果:

operation.printPanel.options = [
    operation.printPanel.options,
    .showsPaperSize,
    .showsOrientation
]

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