当前位置: > > > Swift - 代码设置AirPrint打印的纸张大小(打印尺寸)

Swift - 代码设置AirPrint打印的纸张大小(打印尺寸)

我原来写过两篇介绍AirPrint打印的文章(Swift - 使用AirPrint进行打印Swift - 使用AirPrint打印报表)。有网友问:AirPrint可以指定打印的纸张大小吗?
其实通常来说,纸张大小不需要我们在程序中专门设置的。AirPrint自己会根据你打印内容,以及打印机的预置打印参数来自动选择合适的打印尺寸。
当然,如果非要在程序中设置的话也是可以的。具体实现步骤如下:

1,如果想要手动设置AirPrint的打印尺寸,首先要是知道打印机支持的尺寸
这里以打印机模拟器为例。
(1)点击 Load Paper 可以看到目前模拟的各种打印机。

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

(3)我们程序中什么都不设置的话,程序会自动判断需要的纸张尺寸。比如下面纯文本格式的简单样例(UISimpleTextPrintFormatter)会以A4的尺寸打印。
                      
由于是虚拟打印机,打印出来的是pdf文件。查看其页面大小属性,确实是A4尺寸。


2,在程序中设置纸张大小
如果想要以其他的尺寸打印,我们就要实现 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)

评论0