android 记录打印文件

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,可以专门为打印目的创建该类的实例,步骤:

  1. 创建在加载HTML资源后启动打印任务的WebViewClient
  2. 将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 = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值