Swift - 代码设置AirPrint打印的纸张大小(打印尺寸)
我原来写过两篇介绍AirPrint打印的文章(Swift - 使用AirPrint进行打印、Swift - 使用AirPrint打印报表)。有网友问:AirPrint可以指定打印的纸张大小吗?
其实通常来说,纸张大小不需要我们在程序中专门设置的。AirPrint自己会根据你打印内容,以及打印机的预置打印参数来自动选择合适的打印尺寸。
当然,如果非要在程序中设置的话也是可以的。具体实现步骤如下:
1,如果想要手动设置AirPrint的打印尺寸,首先要是知道打印机支持的尺寸
这里以打印机模拟器为例。
(1)点击 Load Paper 可以看到目前模拟的各种打印机。
(1)点击 Load Paper 可以看到目前模拟的各种打印机。

(2)其中 Simulated InkJet 这个打印机提供了三种打印尺寸(A4、A6、7寸照片)。

(3)我们程序中什么都不设置的话,程序会自动判断需要的纸张尺寸。比如下面纯文本格式的简单样例(UISimpleTextPrintFormatter)会以A4的尺寸打印。


由于是虚拟打印机,打印出来的是pdf文件。查看其页面大小属性,确实是A4尺寸。

2,在程序中设置纸张大小
如果想要以其他的尺寸打印,我们就要实现 UIPrintInteractionControllerDelegate 代理的 choosePaper 方法,设置新尺寸。这里以打印成A6尺寸为例。
(注意:这里设置的尺寸是像素单位,想知道各种纸张规格对应的像素尺寸,可以参考我前面写的这篇文章:A4纸对应的图片像素尺寸(附A组、B组、C组所有纸张规格尺寸表))
如果想要以其他的尺寸打印,我们就要实现 UIPrintInteractionControllerDelegate 代理的 choosePaper 方法,设置新尺寸。这里以打印成A6尺寸为例。
(注意:这里设置的尺寸是像素单位,想知道各种纸张规格对应的像素尺寸,可以参考我前面写的这篇文章:A4纸对应的图片像素尺寸(附A组、B组、C组所有纸张规格尺寸表))


import UIKit class ViewController: UIViewController, UIPrintInteractionControllerDelegate { override func viewDidLoad() { super.viewDidLoad() } @IBAction func printText(sender: AnyObject) { // 打印控制器 let printController = UIPrintInteractionController.sharedPrintController() // 打印任务相关信息 let printInfo = UIPrintInfo(dictionary:nil) printInfo.outputType = UIPrintInfoOutputType.General printInfo.jobName = "my print Job" printController.printInfo = printInfo //设置打印文本 let printText = "hangge.com\n做最好的开发者知识平台。" // 格式化打印文本 let formatter = UISimpleTextPrintFormatter(text: printText) // 设置页面Insets边距 formatter.contentInsets = UIEdgeInsets(top: 36, left: 36, bottom: 36, right: 36) printController.printFormatter = formatter //设置打印控制器代理 printController.delegate = self // 提供打印界面让用户选择打印机和副本的数量 printController.presentAnimated(true, completionHandler: nil) } //设置打印尺寸 func printInteractionController( printInteractionController: UIPrintInteractionController, choosePaper paperList: [UIPrintPaper]) -> UIPrintPaper { //A6尺寸 let pageSize:CGSize = CGSizeMake(10.5 / 2.54 * 72, 14.8 / 2.54 * 72) print("想要设置的尺寸:",pageSize) print("打印机支持的所有尺寸:") for p in paperList { print(p.paperSize) } let paper = UIPrintPaper.bestPaperForPageSize(pageSize, withPapersFromArray: paperList) print("最终打印尺寸:", paper.paperSize) return paper } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }查看打印出来的pdf属性,页面尺寸变成了A6大小。

3,避免设置的纸张尺寸不合适
上面的代码中,我们还在 choosePaper 方法中输出了打印机所支持的所有尺寸,可以看到支持的三种纸张大小对应的像素尺寸如下:
同时我们使用了 bestPaperForPageSize 方法来调整设置的尺寸,这样如果设置的尺寸打印机不支持,也会自动替换成合适的尺寸。
比如:即使我们设置尺寸为A3大小(841.89, 1190.55),最终实际尺寸还是会变成A4大小(595.276, 841.89)