Swift - 使用AirPrint打印报表(表格)
在之前的文章(Swift - 使用AirPrint进行打印)中介绍了AirPrint的简单使用,本文演示如何把统计数据打印成报表。
1,表格打印原理
(1)打印控制器可以设置不同的 printFormatter 来格式化打印内容:UISimpleTextPrintFormatter(简单的文本),UIMarkupTextPrintFormatter(html数据格式化),UIViewPrintFormatter(视图的打印格式化)
(2)我们将要打印的数据拼接成html表格数据,使用 UIMarkupTextPrintFormatter 格式化打印即可。

1,表格打印原理
(1)打印控制器可以设置不同的 printFormatter 来格式化打印内容:UISimpleTextPrintFormatter(简单的文本),UIMarkupTextPrintFormatter(html数据格式化),UIViewPrintFormatter(视图的打印格式化)
(2)我们将要打印的数据拼接成html表格数据,使用 UIMarkupTextPrintFormatter 格式化打印即可。
2,效果图
(1)打印预览

(2)打印出来的页面(这里使用虚拟打印机,所以打印出来的是pdf文件)

3,样例代码
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 = "<table width='100%' id='table1' border='1' cellspacing='0'" + "cellpadding='3' style='font-size:12px;border-collapse: collapse; " + "margin: 0px 0px 1em; padding: 0px; border-spacing: 0px;'>" + "<tbody>" + "<tr>" + "<td rowspan='2' style='margin: 0px; padding: 0px; text-align: center;'" + " width='30'>排名</td>" + "<td rowspan='2' style='margin: 0px; padding: 0px; text-align: center;'" + ">校名</td>" + "<td rowspan='2' style='margin: 0px; padding: 0px; text-align: center;'" + " width='50'>总得分</td>" + "<td colspan='2' style='margin: 0px; padding: 0px; text-align: center;'" + ">人才培养</td>" + "<td style='margin: 0px; padding-left: 5px;'></td>" + "<td colspan='2' style='margin: 0px; padding: 0px; text-align: center;'" + ">科学研究</td>" + "<td style='margin: 0px; padding-left: 5px;'></td>" + "<td colspan='2' rowspan='2' style='margin: 0px; padding: 0px; " + "text-align: center;'>学校参考类型</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; text-align: center;'>得分</td>" + "<td style='margin: 0px; text-align: center;'>研究生培养</td>" + "<td style='margin: 0px; text-align: center;'>本科生培养</td>" + "<td style='margin: 0px; text-align: center;'>得分</td>" + "<td style='margin: 0px; text-align: center;'>自然科学研究</td>" + "<td style='margin: 0px; text-align: center;'>社会科学研究</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; padding-left: 5px;'>1</td>" + "<td style='margin: 0px; padding-left: 5px;'>清华大学</td>" + "<td style='margin: 0px; padding-left: 5px;'>222.89</td>" + "<td style='margin: 0px; padding-left: 5px;'>100.13</td>" + "<td style='margin: 0px; padding-left: 5px;'>68.48</td>" + "<td style='margin: 0px; padding-left: 5px;'>31.65</td>" + "<td style='margin: 0px; padding-left: 5px;'>122.76</td>" + "<td style='margin: 0px; padding-left: 5px;'>97.19</td>" + "<td style='margin: 0px; padding-left: 5px;'>25.57</td>" + "<td style='margin: 0px; padding-left: 5px;'>综合类</td>" + "<td style='margin: 0px; padding-left: 5px;'>研究1型</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; padding-left: 5px;'>2</td>" + "<td style='margin: 0px; padding-left: 5px;'>浙江大学</td>" + "<td style='margin: 0px; padding-left: 5px;'>221.02</td>" + "<td style='margin: 0px; padding-left: 5px;'>96.24</td>" + "<td style='margin: 0px; padding-left: 5px;'>69.87</td>" + "<td style='margin: 0px; padding-left: 5px;'>26.37</td>" + "<td style='margin: 0px; padding-left: 5px;'>124.78</td>" + "<td style='margin: 0px; padding-left: 5px;'>106.85</td>" + "<td style='margin: 0px; padding-left: 5px;'>17.92</td>" + "<td style='margin: 0px; padding-left: 5px;'>理科类</td>" + "<td style='margin: 0px; padding-left: 5px;'>研究1型</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; padding-left: 5px;'>3</td>" + "<td style='margin: 0px; padding-left: 5px;'>北京大学</td>" + "<td style='margin: 0px; padding-left: 5px;'>220.99</td>" + "<td style='margin: 0px; padding-left: 5px;'>97.93</td>" + "<td style='margin: 0px; padding-left: 5px;'>69.47</td>" + "<td style='margin: 0px; padding-left: 5px;'>28.46</td>" + "<td style='margin: 0px; padding-left: 5px;'>123.06</td>" + "<td style='margin: 0px; padding-left: 5px;'>82.69</td>" + "<td style='margin: 0px; padding-left: 5px;'>40.38</td>" + "<td style='margin: 0px; padding-left: 5px;'>综合类</td>" + "<td style='margin: 0px; padding-left: 5px;'>研究1型</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; padding-left: 5px;'>4</td>" + "<td style='margin: 0px; padding-left: 5px;'>上海交通大学</td>" + "<td style='margin: 0px; padding-left: 5px;'>168.81</td>" + "<td style='margin: 0px; padding-left: 5px;'>75.49</td>" + "<td style='margin: 0px; padding-left: 5px;'>53.35</td>" + "<td style='margin: 0px; padding-left: 5px;'>22.14</td>" + "<td style='margin: 0px; padding-left: 5px;'>93.31</td>" + "<td style='margin: 0px; padding-left: 5px;'>82.11</td>" + "<td style='margin: 0px; padding-left: 5px;'>11.20</td>" + "<td style='margin: 0px; padding-left: 5px;'>理科类</td>" + "<td style='margin: 0px; padding-left: 5px;'>研究1型</td>" + "</tr>" + "<tr>" + "<td style='margin: 0px; padding-left: 5px;'>5</td>" + "<td style='margin: 0px; padding-left: 5px;'>复旦大学</td>" + "<td style='margin: 0px; padding-left: 5px;'>152.48</td>" + "<td style='margin: 0px; padding-left: 5px;'>66.57</td>" + "<td style='margin: 0px; padding-left: 5px;'>48.47</td>" + "<td style='margin: 0px; padding-left: 5px;'>18.10</td>" + "<td style='margin: 0px; padding-left: 5px;'>85.91</td>" + "<td style='margin: 0px; padding-left: 5px;'>63.00</td>" + "<td style='margin: 0px; padding-left: 5px;'>22.91</td>" + "<td style='margin: 0px; padding-left: 5px;'>综合类</td>" + "<td style='margin: 0px; padding-left: 5px;'>研究1型</td>" + "</tr>" + "</tbody>" + "</table>" // 格式化打印文本 let formatter = UIMarkupTextPrintFormatter(markupText: printText) // 设置页面Insets边距 formatter.contentInsets = UIEdgeInsets(top: 18, left: 18, bottom: 18, right: 18) printController.printFormatter = formatter // 提供打印界面让用户选择打印机和副本的数量 printController.presentAnimated(true, completionHandler: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }