android官方提供的打印文件分为打印照片和打印HTML文档和自定义文档
!!转载官方的,详细看官方,只是加了一些细节
打印图片
android支持库PrintHelper 类 提供了简单的图片打印方式。该类具有单个版式选项setScaleMode(),
可以通过两种选项之一进行打印:
- SCALE_MODE_FIT - 此选项用于调整图片大小,使整个图片显示在页面的可打印区域内
- SCALE_MODE_FILL - 此选项用于缩放图片,使其填充页面的整个可打印区域。选择此设置意味着图片上下或左右边缘的某些部分不会打印出来。如果您未设置缩放模式,则此选项为默认值。
setScaleMode() 的这两个缩放选项都能保持图片的现有宽高比不变。以下代码示例演示了如何创建 PrintHelper 类的实例、设置缩放选项以及开始打印过程:
private fun doPhotoPrint(activity:Activity) {
activity?.also {
context ->
PrintHelper(context).apply {
scaleMode = PrintHelper.SCALE_MODE_FIT
}.also {
printHelper ->
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.droids)
printHelper.printBitmap("这里是你需要打印的图片的名字", bitmap)
}
}
}
此方法可以作为菜单项的操作来调用。请注意,对于并非始终受支持的操作(如打印),相应的菜单项应放置在溢出菜单中。如需了解详情,请参阅操作栏设计指南。
调用 printBitmap() 方法后,不需要从您的应用中执行进一步操作。此时会显示 Android 打印界面,允许用户选择打印机和打印选项。然后,用户可以打印图片或取消操作。如果用户选择打印图片,则会创建打印任务并在系统栏中显示打印通知。
这里还有几个字段 对应的含义
PrintHelper下面对应的字段
COLOR_MODE_MONOCHROME-----》 黑白图片
COLOR_MODE_COLOR-----》 彩色图片 (默认就是)
ORIENTATION_LANDSCAPE----》横向打印(默认)
ORIENTATION_PORTRAIT-----》纵向打印
打印HTML文档
在 Android 4.4(API 级别 19)中,WebView 类已更新,可支持打印 HTML 内容。该类使您能够加载本地 HTML 资源或从网络上下载网页,创建打印作业并将其移交给 Android 的打印服务。
加载HTML文档
需使用WebView打印HTML文档,需要加载HTML资源或者以字符串形式构建HTML文档
此视图对象通常用作activity布局中的一部分,如果应用未使用webview,可以专门为打印目的创建该类的实例,步骤:
- 创建在加载HTML资源后启动打印任务的WebViewClient
- 将HTML资源加载到webview对象中
private var mWebView:WebView?=null
private fun WebPrint(context:Context){
// 创建一个专门用于打印的 WebView 对象
val webView = WebView(context)
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest) = false
override fun onPageFinished(view: WebView, url: String) {
Log.i(TAG, "page finished loading $url")
createWebPrintJob(view)
mWebView = null
}
}
// 动态生成 HTML 文档:
//这里的test 可以用${string}拼接成你需要打印的
val 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
// 到打印管理器
mWebView = webView
}
注意:请确保用于生成打印任务的调用发生在上一部分中创建的 WebViewClient 的 onPageFinished() 方法中。如果您没有等到页面加载完成,则打印输出可能不完整或空白,也可能完全失败。
注意:以上示例代码保存了 WebView 对象的实例,以便在创建打印作业之前不会对其进行垃圾回收。请确保您在自己的实现中也这样做,否则打印过程可能会失败。
如需在页面中添加图形,请将图形文件放在项目的 assets/ 目录中,并在 loadDataWithBaseURL() 方法的第一个参数中指定基准网址,如以下代码示例所示:
webView.loadDataWithBaseURL(
"file:///android_asset/images/",
htmlBody,
"text/HTML",
"UTF-8",
null
)
您还可以将 loadDataWithBaseURL() 方法替换为 loadUrl(),以加载要打印的网页,如下所示。
//loadUrl("") 这里你可以直接替换成你要打印的文件网址,比如你要打印一个票据---那你直接吧票据对应的url放进来就好了
webView.loadUrl("https://developer.android.com/about/index.html")
使用 WebView 创建打印文档时,应注意以下限制:
- 您不能向文档中添加页眉或页脚,包括页码。
- HTML 文档的打印选项不包括打印特定范围的页面,例如:不支持打印一个 10 页 HTML 文档中的第 2 到 4 页。
- WebView 的实例一次只能处理一个打印作业。
- 不支持包含 CSS 打印属性(例如横向属性)的 HTML 文档。
- 您不能在 HTML 文档中使用 JavaScript 触发打印作业。
注意:布局中包括的 WebView 对象的内容在其加载文档后也可以打印。
创建打印作业
创建 WebView 并加载 HTML 内容之后,您的应用即将完成它那部分的打印流程。接下来的步骤是访问 PrintManager,创建打印适配器,最后创建打印作业。以下示例说明了如何执行这些步骤:
@SuppressLint("ServiceCast")
private fun createWebPrintJob(webView: WebView) {
// 获取 PrintManager 实例
(getSystemService(Context.PRINT_SERVICE) as? PrintManager)?.let {
printManager ->
val jobName =