首页 > 编程语言 >鸿蒙网络编程系列39-Web组件打印示例

鸿蒙网络编程系列39-Web组件打印示例

时间:2024-10-29 08:48:27浏览次数:6  
标签:Web 39 网页 web 打印 示例 组件 print

1. web组件打印简介

web组件在加载了网页以后,有两种方式可以实现打印,第一种是在网页中调用W3C标准协议接口window.print()进行打印,这种方式比较简单方便,只要网页中触发了该方法即可打印,缺点是如果网页没有地方触发则不能打印;另外一种是在应用侧实现的,通过web控制器的createWebPrintDocumentAdapter方法创建打印适配器,然后将适配器传入打印的print接口即可调起打印,虽然有点复杂,但是可以打印任何网页;本文将分别演示这两种打印方式的实现。

2. web组件打印演示

本示例运行后的界面如图所示,这里的网页使用的是应用内置的html资源文件:

单击网页中的“打印”按钮,即可弹出打印页面如图所示:

页面的上部为打印预览,下部为打印配置。

如果不使用页面内的打印按钮,而是单击应用侧的“打印”按钮(确保不选中“打印背景”选项),则会弹出如下的打印页面:

这里的预览页面没有显示背景色,如果要打印背景色,可以选中“打印背景”选项。

3. web组件打印示例编写

下面详细介绍创建该示例的步骤。

步骤1:创建Empty Ability项目。

步骤2:在module.json5配置文件加上对权限的声明:

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]

这里添加了访问互联网的权限。

步骤3:添加print.html资源文件,该文件即为web组件加载的html文件,内容如下:

<!DOCTYPE html>
<html>

<body style="background-color: lightblue;">
<div style="text-align: center;">
    <h1>
        打印测试页
    </h1>
    <button onclick="window.print();">打印</button>
    <p> 网页内容 </p>
    <p style="color: blue;"> 打印Web组件中的网页内容示例 </p>
</div>
</body>

步骤4:在Index.ets文件里添加如下的代码:

import web_webview from '@ohos.web.webview'
import { print } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  //是否打印背景
  @State printBackground: boolean = false
  scroller: Scroller = new Scroller()
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  webPrintAdapter?: print.PrintDocumentAdapter

  build() {
    Row() {
      Column() {
        Text("Web组件打印")
          .fontSize(14)
          .fontWeight(FontWeight.Bold)
          .width('100%')
          .textAlign(TextAlign.Center)
          .padding(10)

        Flex({ justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) {
          Text("打印背景")
            .fontSize(14)

          Checkbox()
            .select($$this.printBackground)
            .shape(CheckBoxShape.ROUNDED_SQUARE)

          Button("打印")
            .onClick(() => {
              this.print()
            })
            .width(60)
            .fontSize(14)
        }
        .width('100%')
        .padding(5)

        Scroll(this.scroller) {
          Web({ src: $rawfile("print.html"), controller: this.controller })
            .padding(10)
            .width('100%')
            .textZoomRatio(150)
            .backgroundColor(0xeeeeee)
            .javaScriptAccess(true)
        }
        .align(Alignment.Top)
        .backgroundColor(0xeeeeee)
        .height(300)
        .flexGrow(1)
        .scrollable(ScrollDirection.Vertical)
        .scrollBar(BarState.On)
        .scrollBarWidth(20)
      }
      .width('100%')
      .justifyContent(FlexAlign.Start)
      .height('100%')
    }
    .height('100%')
  }

  //打印web组件内容
  print() {
    if (this.webPrintAdapter == undefined) {
      this.webPrintAdapter = this.controller.createWebPrintDocumentAdapter("webPrint");
    }

    this.controller.setPrintBackground(this.printBackground)
    print.print("printJob", this.webPrintAdapter, null, getContext())
      .then((task: print.PrintTask) => {
        task.on('succeed', () => {
          console.log('打印成功!');
        })
      })
  }
}

步骤5:编译运行,建议使用真机。

步骤6:按照本节第2部分“web组件打印演示”操作即可。

4. 代码分析

本示例代码较简单,需要注意的是网页内打印调用方法,即window.print();另外一点是在应用侧打印时,注意不要多次创建打印适配器,本示例是通过判断打印适配器的变量是否为undefined实现的。

(本文作者原创,除非明确授权禁止转载)

本文源码地址:

https://gitee.com/zl3624/harmonyos_network_samples/tree/master/code/web/WebPrint

本系列源码地址:

https://gitee.com/zl3624/harmonyos_network_samples

标签:Web,39,网页,web,打印,示例,组件,print
From: https://blog.csdn.net/tashanzhishi/article/details/143302316

相关文章

  • goframe gconv.structs示例代码
    以下是一些使用 gconv.structs  的示例代码,展示了如何在GoFrame框架中进行结构体转换:示例1:基本使用packagemainimport(  "fmt"  "github.com/gogf/gf/frame/g"  "github.com/gogf/gf/util/gconv")typeUserstruct{  Uid   int  ......
  • javaweb基于JSP+Servlet开发小区物业管理系统源码 毕业设计 课程设计
    作品编号:1114数据库:mysql后端技术:Servlet......
  • web前端导航栏及下拉菜单制作(附完整代码)
    导航栏效果图完整代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document<......
  • 物理学基础精解【139】
    文章目录统计物理学无偏估计(UnbiasedEstimation)无偏方差估计无偏方差估计公式的推导贝塞尔修正(Bessel'sCorrection)修正原理修正效果应用领域无偏方差估计公式的推导过程一、基本概念二、推导过程三、结论四、自由度解释样本方差公式是通过以下步骤推导出来1.样本方......
  • javaweb基于SSH开发简单的新闻文章管理系统源码(前台+后台) 课程设计 大作业
    作品编号:1113数据库:mysql后端技术:SSH......
  • 【JavaWeb】ELK介绍
    1.ELK简介ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分......
  • Webpack搭建本地服务器
    为什么要搭建本地服务器webpack-dev-server认识模块热替换(HMR)开启HMR框架的HMR......
  • Vue3+TS中的web Worker实战
    在开始使用WebWorkers之前,首先让我们先了解一下什么是WebWorkersWebWorkers是一种在浏览器后台独立于主线程运行的JavaScript线程,它允许在Web应用程序中进行后台和长时间运行的脚本处理,而不会影响用户的界面性能。WebWorkers通过在后台线程中执行JavaScript脚......
  • 安装包丨WebGIS开发环境搭建及所需工具
    以下工具为GIS开发中所涉及到的工具,当然如果您已经非常精通web前端领域,并有其他习惯的工具也可以忽略~1.开发工具:Node安装Node.js是一个基于ChromeV8引擎的JavaScript运行环境Node.js使用了一个事件驱动、非阻塞式I/0的模型,使其轻量又高效Node.js的包管理器n......
  • Web渗透文件上传有哪些漏洞
    Web渗透文件上传有以下漏洞:一、绕过文件类型检查漏洞;二、文件名解析漏洞;三、目录穿越漏洞;四、二进制文件漏洞;五、文件上传时的身份验证和授权问题;等等。绕过文件类型检查漏洞会导致应用程序将恶意文件误认为合法文件,从而允许攻击者执行恶意操作。一、绕过文件类型检查漏洞文......