HarmonyOS 关于web组件加载沙盒中的pdf文件失败?

使用加载沙盒中的PDF文档,第一次时会出现报错弹窗,提示‘未能加载PDF文档’,请问是什么原因导致的,使用loadUrl()加载时,url检查是正确的。该如何去掉加载PDF文件时,web组件上显示的下载和标题视图?

阅读 607
1 个回答

未能加载pdf,需要在build前添加aboutToAppear(),顶部菜单栏隐藏:在web组件的src属性中拼接上?\#toolbar=0&navpanes=0可实现需求。

import web_webview from '@ohos.web.webview'
import { BusinessError } from '@kit.BasicServicesKit';
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

let uri = ''

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  aboutToAppear(): void {
    this.myRawfileCopy()//提前将数据写入杀向目录中
  }
  build() {
    Column() {
      Web({
        src:
        //"xxxx", // 方式一 加载网络PDF文档
        "file://" + getContext(this).filesDir + "/sample.pdf?#toolbar=0&navpanes=0", // 方式二 加载本地应用沙箱内PDF文档
        controller: this.controller
      })
        .fileAccess(true)
        .domStorageAccess(true)
    }
  }

  myRawfileCopy() {
    let context = getContext(this) as common.UIAbilityContext;
    //rawfile目录下pdf文件
    context.resourceManager.getRawFileContent("sample.pdf", (err: BusinessError, data: Uint8Array) => {
      if (err != null) {
        console.error(`打开sample.pdf失败: ${err.message}`)
      } else {
        let buffer = data.buffer
        let filesDir = context.filesDir
        console.log('沙箱路径是: ' + filesDir)
        console.log('sample.pdf的沙箱路径dirPath是: ' + filesDir)
        let filePath = filesDir + "/sample.pdf"
        let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)

        try {
          fs.writeSync(file.fd, buffer) // 拷贝文件到沙箱,为了简便,这里是直接getrawfilecontent然后写入,当文件过大时内存压力会很大,如需优化,可通过buffer进行读取
          fs.close(file.fd)
          // 把沙箱中的文件第一行读出来,验证是否拷贝成功;(fs.readFileSync 方法读取整个文件)
          let data = fs.readTextSync(filePath);
          console.log('拷贝成功 success ' + data)
        } catch (err) {
          console.log('拷贝失败 error')
        }
        uri = 'file:///data/storage/el2/base/haps/entry/files/first.html'
        console.log("uri:" + uri)
      }
    })
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进