当前位置: > > > Swift - 使用AirPrint打印报表(表格)

Swift - 使用AirPrint打印报表(表格)

在之前的文章(Swift - 使用AirPrint进行打印)中介绍了AirPrint的简单使用,本文演示如何把统计数据打印成报表。

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