web端vue2使用pdf发票内容显示不全的问题,展示xls和xlsx问题

1.安装pdf的版本要求(注意版本)

//pdf安装版本
 "vue-pdf-signature": "^4.2.7",
 "pdfjs-dist": "^2.5.207"
//

安装后vue-pdf打包后会有问题

建议安装vue-pdf-signature替换掉 vue-pdf

2.在页面中的使用(如下示例代码,样式自行调整)

<template>
  <div>
    <el-dialog title="pdf和xls文档展示" :visible.sync="dialogStatus" width="50%" v-if="dialogStatus" :before-close="handleClose"
      append-to-body>
      <!-- 展示文档开始 -->
      <el-table :data="excelData" style="width: 100%">
        <el-table-column v-for="(value, key, index) in excelData[excelData.length - 1]" :key="index" :prop="key"
          :label="key"></el-table-column>
      </el-table>
      <!-- 展示文档结束 -->
      <div>
        <!-- 展示pdf开始 -->
        <div>
          <pdf style="height:100%;width:'600px'" :src="srcurl" :page="pdfPage" @num-pages="pageCount = $event"
            @page-loaded="pdfPage = $event"></pdf>
        </div>
        <!-- 展示pdf结束 -->
        <!-- pdf页码展示开始 -->
        <div slot="footer" class="dialog-footer">
          <div style="width: 100%;display: flex;justify-content: center">
            <div>
              <el-button type="primary" @click="changePdfPage(0)">上一页</el-button>
              <span> {{ pdfPage }} / {{ pageCount }} </span>
              <el-button type="primary" @click="changePdfPage(1)">下一页</el-button>
            </div>
          </div>
        </div>
        <!-- pdf页码展示结束 -->
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button>取 消</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>

// 引入vue-pdf-signature
import pdf from "vue-pdf-signature";
// 引入CMapReaderFactory是避免有些字体无法展示
import CMapReaderFactory from 'vue-pdf-signature/src/CMapReaderFactory.js'
export default {
  name: '',
  props: {},

  data() {
    return {
      srcurl: "",
      pageCount: 0,
      excelData: []
    }
  },
  methods: {
    handleClose(){

    },
    setTableList(sheetName) {
      let work = this.workbook.Sheets[sheetName];
      // 这是要展示的数据内容
      this.excelData = XLSX.utils.sheet_to_json(work);
    },
    changePdfPage(val) {
      if (val === 0 && this.pdfPage > 1) {
        this.pdfPage--;
      }
      if (val === 1 && this.pdfPage < this.pageCount) {
        this.pdfPage++;
      }
    },
    // 在线查看excel文件
    readWorkbookFromRemoteFile(url) {
      let xhr = new XMLHttpRequest();
      xhr.open("get", url, true);
      xhr.responseType = "arraybuffer";
      let _this = this;
      xhr.onload = function (e) {
        if (xhr.status === 200) {
          let data = new Uint8Array(xhr.response);
          let workbook = XLSX.read(data, { type: "array" });
          let sheetNames = workbook.SheetNames; // 工作表名称集合
          _this.workbook = workbook;
          _this.setTableList(sheetNames[0]);
        } else {
          _this.$nextTick(() => {
            _this.excelData = []
          })

        }
      };
      xhr.send();
    },
    getAnnex(row) {

      let arr;
      arr = row.testReportFile.name.substr(-3)
      // 具体函数调用位置根据情况而定
      if (arr === "lsx" || arr === "xls") {
        //展示xlsx或者xls文件
        this.readWorkbookFromRemoteFile(row.testReportFile.url);
        this.dialogStatus = true
      } else {
        this.getPdf(row)
      }

    },

    getPdf(url) {
      this.srcurl = pdf.createLoadingTask({
        url:url, //可以简写
        // pdf内容文字丢失
        //cMapUrl: '',//引入pdf.js字体
        cMapPacked: true,
        // 动态文字不展示问题
        CMapReaderFactory
      })
      this.srcurl.promise.then(pdf => {
        this.pageCount = pdf.numPages // 这里拿到当前pdf总页数
      }).catch(err => {
        console.log('err', err)
      })
      this.dialogStatus = true
    },

  }
}

</script>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根引用提供的信息,如果在使用vue-pdf预览发票时发现文字不显示的情况,可以尝试以下步骤: 1. 检查是否已经按照引用中的描述,将字体文件夹从"node_modules/vue-pdf/build/pdf-dist/cmaps"复制到"static"文件夹下。确保复制的过程中没有发生错误。 2. 确保在组件中正确引用了字体文件。根据引用的描述,可以直接在组件中引用复制到"static"文件夹下的字体文件。 3. 检查是否有其他因素导致文字不显示,例如文件路径是否正确、文件格式是否正确等。确保发票文件本身没有问题。 4. 如果以上步骤都没有解决问题,可以尝试使用其他PDF预览插件或解决方案,例如引用中提到的vue-pdf-signature。 根据引用提供的信息,可以在父组件中调用封装好的pdf组件,并将后返回的PDF地址传递给子组件,以实现预览PDF的功能。请确保在调用时传递了正确的PDF地址。 总结:如果在使用vue-pdf预览发票时文字不显示,可以先尝试按照引用中的方法复制字体文件,并在组件中正确引用字体文件。如果问题仍然存在,可以尝试使用其他PDF预览插件或解决方案。请确保在调用pdf组件时传递了正确的PDF地址。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue-pdf 票据字体不显示问题](https://blog.csdn.net/lucklymm/article/details/124296543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值