1. 微信小程序预览 PDF 文件

1.1. 方案一: web-view 直接展示 PDF 内容

使用场景:pdf 文件为非机密文件,可以直接从 CDN 读取文件。

<template>
  <view class="contract">
    <Navigate :title="navTitle"></Navigate>
    <web-view src="https://g.lxstatic.com/dos/ucma/dev/demo.pdf"></web-view>
  </view>
</template>

1.2. 方案二:wx.openDocument 利用手机自带的第三方应用打开 PDF 文件

使用场景:pdf 文件为机密文件,文件存储地址不能随意暴露,需要经过后台接口读取文件,然后直接把文件内容返回给前端。

由于是机密文件,接口往往有权限控制,需要设置请求头。

wx.downloadFile({
  url: 'https://g.lxstatic.com/dos/ucma/dev/demo.pdf',
  header: {
    'access-token': wx.getStorageSync('access_token')
  },
  success (res) {
    if (res.statusCode === 200) {
      wx.openDocument({
        filePath: res.tempFilePath,
        success: function (res) {
          console.log('打开文档成功')
        }
      })
    }
  }
})

这种方式打开的 pdf 文件标题是源文件的名称,非常不美观。

为了解决 title 不美观的问题,需要通过 filePath 对文件重命名

wx.env.USER_DATA_PATH: http://usr【文件系统中的用户目录路径 (本地路径)】

// 查看我的合同
handleContract() {
  const filePath = `${wx.env.USER_DATA_PATH}/我的合同.pdf`
  wx.downloadFile({
    url: `${appConfig.baseUrl}/my/esign_contract?application_id=${this.applicationId}`,
    header: {
      'access-token': wx.getStorageSync('access_token')
    },
    filePath,
    success (res) {
      if (res.statusCode === 200) {
        wx.openDocument({
          filePath,
          success: function (res) {
            console.log('打开文档成功')
          }
        })
      }
    },
    fail (res) {
      wx.showToast({
        icon: 'none',
        title: '打开文档失败'
      })
    }
  })
}
Copyright © tomgou 2022 all right reserved,powered by Gitbook该文章修订时间: 2023-08-28 17:33:23

results matching ""

    No results matching ""