西安做网站公司工资,wordpress 导航 分类,国内哪个应用商店app最全,手机怎么发wordpress原文地址#xff1a;http://android.xsoftlab.net/training/printing/html-docs.html
在Android中打印内容要比打印照片要复杂一些#xff0c;它要求将文本与图像整合到一个文档中。不过Android框架提供了一种实现方式#xff0c;这种方式需要使用HTML来整合文档并打印http://android.xsoftlab.net/training/printing/html-docs.html
在Android中打印内容要比打印照片要复杂一些它要求将文本与图像整合到一个文档中。不过Android框架提供了一种实现方式这种方式需要使用HTML来整合文档并打印实现这个过程仅需要少量的代码。
在Android 4.4及以上的版本中类WebView也开始可以打印HTML内容。这个类允许你加载本地的HTML资源或者从web上下载一个页面并可以创建一个打印工作然后将工作传递给Android的打印服务。
这节课展示了如何快速构建一个包含了文本及图像的HTML文档然后通过WebView将它打印出来。
加载HTML文档
通过WebView打印HTML文档会涉及到加载HTML资源或者构建一个字符串形式的HTML文档。这一小节描述了如何构建HTML的字符串并且通过WebView将其加载并打印出来。
这个View对象可以作为activity布局的典型用法。然而如果你的程序没有使用WebView那么你可以创建一个这个类的实例然后专门用于打印。创建自定义打印的主要步骤有
1 .创建一个WebViewClient它用于在HTML资源加载完毕之后启动打印工作。2 .加载HTML资源到WebView对象中。
下面的代码演示了如何创建一个简要的WebViewClient以及如何加载动态创建的HTML文档
private WebView mWebView;
private void doWebViewPrint() {// Create a WebView object specifically for printingWebView webView new WebView(getActivity());webView.setWebViewClient(new WebViewClient() {public boolean shouldOverrideUrlLoading(WebView view, String url) {return false;}Overridepublic void onPageFinished(WebView view, String url) {Log.i(TAG, page finished loading url);createWebPrintJob(view);mWebView null;}});// Generate an HTML document on the fly:String htmlDocument htmlbodyh1Test Content/h1pTesting, testing, testing.../p/body/html;webView.loadDataWithBaseURL(null, htmlDocument, text/HTML, UTF-8, null);// Keep a reference to WebView object until you pass the PrintDocumentAdapter// to the PrintManagermWebView webView;
} Note: 要确保所产生的打印工作是在WebViewClient的onPageFinished()方法中被调用的。如果没有等到页面加载完毕那么所打印出的内容可能是不完整或者空白的甚至可能会完全失败。 Note: 上面的示例代码保持了一个WebView对象的引用所以在打印工作创建之前不会被垃圾回收器回收。要确保在你自己的实现中做了相同的工作否则打印进程可能会失败。 如果你想在这个页面中包含图像请将图像文件放置到工程的assets/目录下然后在loadDataWithBaseURL()方法的第一个参数中指定这个图像的URL就像下面的代码展示的那样
webView.loadDataWithBaseURL(file:///android_asset/images/, htmlBody,text/HTML, UTF-8, null);
你也可以加载一个Web页来打印不过这里不是使用loadDataWithBaseURL()而是使用loadUrl()就像下面这样
// Print an existing web page (remember to request INTERNET permission!):
webView.loadUrl(http://developer.android.com/about/index.html);
当使用WebView来创建打印文档时你应该意识到以下这些限制
不能为文档添加页眉、页脚包括页码。HTML文档的打印选项不包括打印页码范围的能力举个例子要打印10页文档的第2页到第4页这时就不支持了。在同一时间只能有一个WebView的实例处理打印工作。一个HTML文档会包含CSS打印属性比如横向打印属性这并不支持。不能使用HTML文档内部的JavaScript来启动打印。 Note: 布局中所包含的WebView的内容在加载完文档之后可以被打印一次。 如果你想创建一个有更多选项的打印及打印页上完整的控制功能请参见下节课程 Printing a Custom Document.
创建打印工作
在创建WebView并加载完毕HTML文档之后你的程序几乎完成了打印所要做的所有工作。下面的步骤就需要访问PrintManager创建一个打印适配器到最后创建一个打印工作。下面的代码演示了如何执行这些步骤
private void createWebPrintJob(WebView webView) {// Get a PrintManager instancePrintManager printManager (PrintManager) getActivity().getSystemService(Context.PRINT_SERVICE);// Get a print adapter instancePrintDocumentAdapter printAdapter webView.createPrintDocumentAdapter();// Create a print job with name and adapter instanceString jobName getString(R.string.app_name) Document;PrintJob printJob printManager.print(jobName, printAdapter,new PrintAttributes.Builder().build());// Save the job object for later status checkingmPrintJobs.add(printJob);
}
这个例子在程序的内部保存了一个PrintJob对象的实例不过这不是必须的。你的程序可能会在工作开始之后需要使用这个对象来追踪打印工作的进度。这适用于在程序内部监视打印工作的状态比如完成、失败或者是用户取消。创建内置的通知并不是必须的因为打印框架会为打印工作自动的创建一个系统通知。