对于有些应用,比如绘图应用,页面布局应用和其它一些关注于图像输出的应用,创造出精美的打印页面将是它的核心功能。在这种情况下,仅仅打印一幅图片或一个HTML文档就不够了。这类应用的打印输出需要精确地控制每一个会在页面中显示的对象,包括字体,文本流,分页符,页眉,页脚和一些图像元素等等。
想要创建一个完全自定义的打印文档,需要投入比之前讨论的方法更多的编程精力。我们必须构建可以和打印框架相互通信的组件,调整打印参数,绘制页面元素并管理多个页面的打印。
这节课将展示如何连接打印管理器,创建一个打印适配器以及如何构建出需要打印的内容。
连接打印管理器
当我们的应用直接管理打印进程时,在收到来自用户的打印请求后,第一步要做的是连接Android打印框架并获取一个PrintManager类的实例。该类允许我们初始化一个打印任务并开始打印任务的生命周期。下面的代码展示了如何获得打印管理器并开始打印进程。private void doPrint() {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getActivity()
.getSystemService(Context.PRINT_SERVICE);
// Set job name, which will be displayed in the print queue
String jobName = getActivity().getString(R.string.app_name) + " Document";
// Start a print job, passing in a PrintDocumentAdapter implementation
// to handle the generation of a print document
printManager.print(jobName, new MyPrintDocumentAdapter(getActivity()),
null); //
}
上面的代码展示了如何命名一个打印任务以及如何设置一个PrintDocumentAdapter类的实例,它负责处理打印生命周期的每一步。打印适配器的实现会在下一节中进行讨论。Note:print()方法的最后一个参数接收一个PrintAttributes对象。我们可以使用这个参数向打印框架进行一些打印设置,以及基于前一个打印周期的预设,从而改善用户体验。我们也可以使用这个参数对打印内容进行一些更符合实际情况的设置,比如当打印一幅照片时,设置打印的方向与照片方向一致。
创建打印适配器
打印适配器负责与Android打印框架交互并处理打印过程的每一步。这个过程需要用户在创建打印文档前选择打印机和打印选项。由于用户可以选择不同性能的打印机,不同的页面尺寸或不同的页面方向,因此这些选项可能会影响最终的打印效果。当这些选项配置好之后,打印框架会寻求适配器进行布局并生成一个打印文档,以此作为打印的前期准备。一旦用户点击了打印按钮,框架会将最终的打印文档传递给Print Provider进行打印输出。在打印过程中,用户可以选择取消打印,所以打印适配器必须监听并响应取消打印的请求。