MacOS+SwiftUI 打印软件开发 - AppKit -> Printing -> NSPrintPanel

书接上回

最近项目上有个很奇葩的需求:公司内部管理系统(web版)的培训资料(图片、pdf),只能纸质打印,不能导出PDF。需求合理性先不管了,既然甲方大老爷开口了,做是肯定要做的,那就先调研一下目前的问题吧。

1. AppKit -> Printing

说道MacOS的打印流程就要用到AppKit中的Printing模块了,文档地址:https://developer.apple.com/documentation/appkit/printing 。基本用到的类还是不多的,我们一个一个看一下:

image

1.1 NSPrintPanel

打印面板可以在执行打印命令前,让用户选择需要打印的页面范围和打印份数。在打印具体某个类型的数据时,打印面板可以呈现一个简化的界面。例如,面板可以显示打印设置的预设列表,这让用户可以分组启用打印设置,而不是单独启用。为jobStyleHint属性指定一个适当的字符串,可以激活简化的界面,并确定要显示哪些预设。

image

1.1.1 jobStyleHint

此属性控制出现在简化打印面板屏幕的预设菜单中的项目集。有关支持的作业风格提示的列表,请参阅作业风格提示。将此属性设置为nil以禁用简化打印面板界面并使用标准界面(相当于Core Printing的kPMPresetGraphicsTypeGeneral)。

jobStyleHint可以设置4个枚举值,分别是: .nil, .photo, .allPresets, .noPresets。具体设置与面板中Presets可选项的关系如下面几幅图

.nil

image

.photo

image

.allPresets

image

.noPresets

image

1.1.2 options

当前面板的配置参数,枚举值参见NSPrintPanel.Options。具体使用这个配置参数的方法见如下代码:

let printPanel = NSPrintPanel()
printPanel.options = [
  NSPrintPanel.Options.showsCopies,
  NSPrintPanel.Options.showsPageRange,
  NSPrintPanel.Options.showsPaperSize,
  NSPrintPanel.Options.showsOrientation,
  NSPrintPanel.Options.showsScaling,
  NSPrintPanel.Options.showsPrintSelection,
  NSPrintPanel.Options.showsPageSetupAccessory,
  NSPrintPanel.Options.showsPreview,
]

if printPanel.runModal(with: printInfo) != NSApplication.ModalResponse.OK.rawValue {

}

1.1.3 NSPrintPanel.Options

打印面板样式内容的配置常量

  • showsCopys

打印面板包括一个区域,用于操纵打印的份数。

image
  • showsPageRange

打印面板包括一系列区域,用于操纵打印的页面的范围。

image
  • showsPaperSize

打印面板包括一个控件,用于操纵打印机的纸张尺寸。

image
  • showsOrientation

打印面板包括一个控件,用于操纵打印机的纸张方向。

image
  • showsScaling

打印面板包括一个控价,用于操作输出的缩放比例。

image
  • showsPrintSelection

打印面板包括一额外的用于页面范围的下拉框选项。

image
  • showsPageSetupAccessory

打印面板包括一个单独的附件视图,用于操作纸张尺寸、方向和缩放属性。

image
  • showsPreview

打印面板显示文档内容的内置预览。

image

1.1.4 func defaultButtonTitle() -> String?

返回打印面板默认按钮的标题

1.1.5 func setDefaultButtonTitle(String?)

设置打印面板默认按钮的标题

1.1.6 var helpAnchor: NSHelpManager.AnchorName?

设置打印面板相关的HTML帮助文档

你可能感兴趣的:(MacOS+SwiftUI 打印软件开发 - AppKit -> Printing -> NSPrintPanel)