Swift - 使用AirPrint打印报表(表格)
作者:hangge | 2016-04-10 10:40
在之前的文章(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()
}
}
全部评论(0)