书接上回
最近项目上有个很奇葩的需求:公司内部管理系统(web版)的培训资料(图片、pdf),只能纸质打印,不能导出PDF。需求合理性先不管了,既然甲方大老爷开口了,做是肯定要做的,那就先调研一下目前的问题吧。
1. AppKit -> Printing
说道MacOS的打印流程就要用到AppKit中的Printing模块了,文档地址:https://developer.apple.com/documentation/appkit/printing 。基本用到的类还是不多的,我们一个一个看一下:

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

1.1.1 jobStyleHint
此属性控制出现在简化打印面板屏幕的预设菜单中的项目集。有关支持的作业风格提示的列表,请参阅作业风格提示。将此属性设置为nil以禁用简化打印面板界面并使用标准界面(相当于Core Printing的kPMPresetGraphicsTypeGeneral)。
jobStyleHint可以设置4个枚举值,分别是: .nil, .photo, .allPresets, .noPresets。具体设置与面板中Presets可选项的关系如下面几幅图
.nil

.photo

.allPresets

.noPresets

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
打印面板包括一个区域,用于操纵打印的份数。

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

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

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

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

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

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

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

1.1.4 func defaultButtonTitle() -> String?
返回打印面板默认按钮的标题
1.1.5 func setDefaultButtonTitle(String?)
设置打印面板默认按钮的标题
1.1.6 var helpAnchor: NSHelpManager.AnchorName?
设置打印面板相关的HTML帮助文档
网友评论