StupidBeauty
Read times:2463Posted at: - no title specified

安卓开发文档翻译:打印HTML文档,Printing HTML Documents

要在安卓系统中打印除简单照片之外的内容的话,就需要在打印文档中编排文本和图形内容。安卓框架提供了一种方式,可以使用HTML来编排文档内容,并且使用较少的代码来打印它。

在安卓 4.4(应用编程接口级别19) 中, WebView 类进行 了更新, 以支持 对 HTML 内容的打印。 这个类,允许妳载入一个本地 HTML资源或者 从互联网上下载某个网页,创建 一个打印任务,然后 将它提交给安卓的打印服务。

本课程向妳展示了,如何快速地构建一个HTML 文档,以容纳 要打印的文本和图形内容,然后使用 WebView 来打印它。

载入一个HTML文档

使用 WebView 打印HTML文档 ,需要载入 一个HTML 资源或者以字符串的形式构建一个HTML 文档。 本小节说明的是,如何构建 一个 HTML字符串 ,并且将它载入到一个 WebView 中,以便打印。

这个视图对象,一般都是用于某个活动布局 中的一部分。然而 ,如果 妳的应用程序中 未使用 WebView 的话,则, 妳可以创建这个类的实例, 以特别用于打印目的。创建 这个自定义打印视图的主要步骤如下:

  1. 1. 创建 一个 WebViewClient ,让它在HTML 资源载入完毕之后启动一个打印任务。

  2. 2. 将HTML 资源载入到 WebView 对象中。

以下代码示例,演示的是,如何创建 一个简单的 WebViewClient ,并且载入 一个快速创建的HTML 文档:

private WebView mWebView;

private void doWebViewPrint() {

// 创建 一个专门用于打印的WebView 对象

WebView webView = new WebView(getActivity());

webView.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return false;

}

@Override

public void onPageFinished(WebView view, String url) {

Log.i(TAG, "page finished loading " + url);

createWebPrintJob(view);

mWebView = null;

}

});

// 快速生成 一个HTML 文档:

String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +

"testing, testing...</p></body></html>";

webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);

// 保留 对该WebView 对象的一个引用,直到 妳将该PrintDocumentAdapter传递到PrintManager为止

mWebView = webView;

}

注意 确保 妳要在之前小节中创建 WebViewClient onPageFinished() 方法中才调用代码,以生成打印任务。如果 妳不等到页面载入完毕,那么 ,打印输出 的内容可能 是不完整的,或者是空白的,或者,甚至可能完全打印失败。

注意 上面的示例代码中,保留 了该 WebView 对象的一个实例, 以确保, 它不会在打印任务创建之前被垃圾回收。 请确保在妳自己的代码中也是这样做的,否则,打印过程可能失败

如果 妳想要在页面中包含图像内容,则, 将图像文件放置到妳的项目的 assets/ 目录中,并且 ,在 loadDataWithBaseURL() 方法的第一个参数中指定一个基准网址,正如 以下示例代码中那样:

webView.loadDataWithBaseURL("file:///android_asset/images/", htmlBody,

"text/HTML", "UTF-8", null);

妳也可以载入一个网页以进行打印,具体就是 loadDataWithBaseURL() 方法替换成 loadUrl() 就像以下示例中那样。

// 打印一个已有的网页(记得要获取INTERNET权限)

webView.loadUrl("http://developer.android.com/about/index.html");

在使用 WebView 创建打印文档时,妳应当注意以下限制:

  • •. 妳无法向文档中添加页眉及页脚,包括页码也无法添加。

  • •. 对于HTML 文档,其打印选项不支持指定打印的页码范围,例如:想要打印一个10 页的HTML 文档中的第2 到4 页,这是不支持的。

  • •. 一个 WebView 实例,一次只能处理一个打印任务。

  • •.包含CSS 打印属性(例如横向模式属性)的HTML文档,是不支持的。

  • •. 妳无法在HTML 文档中使用 JavaScript 来触发打印过程。

注意 布局 中包含的 WebView 对象,在它载入了文档之后,其内容也可以被打印。

如果 妳想要创建一个更加自定义的打印输出,并且 想要完全控制打印出来 的页面上绘制出来的内容,那么 请阅读下一篇课程: 打印 自定义文档

创建一个打印任务

在创建了 WebView 并且载入 了HTML 内容之后, 在打印这件事上,妳的应用程序已经快要做完它的工作了。 接下来的步骤就是,访问到 PrintManager ,创建一个打印适配器,最终,创建一个打印任务。 以下示例,展示了,如何完成这些步骤:

private void createWebPrintJob(WebView webView) {

// 获取 到一个PrintManager 实例

PrintManager printManager = (PrintManager) getActivity()

.getSystemService(Context.PRINT_SERVICE);

// 创建 一个打印适配器实例

PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

// 创建 一个打印任务,指定名字和适配器实例

String jobName = getString(R.string.app_name) + " Document";

PrintJob printJob = printManager.print(jobName, printAdapter,

new PrintAttributes.Builder().build());

// 保留 该任务对象,以便日后检查状态

mPrintJobs.add(printJob);

}

这个示例中,保留了该 PrintJob 对象的一个实例,以让应用程序本身使用,当然,这并不是必要的动作。 妳的应用程序可使用这个对象来在打印过程中跟踪打印任务的进度。 这种做法,狠有用的, 妳可以用这种方法来监视 该打印任务的状态, 以得知任务是否最终完成 、是否失败,或者 是否被用户取消了。 不需要在妳的应用中创建一个通知项,因为,打印框架会自动为该打印任务创建一个系统级的通知项。

小米

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands