• vue中如何使用vue-pdf及相应报错解决


     

    目录

    一、安装npm 依赖

    二、引入组件

    1、html中使用组件

    单页

    多页 

    2、数据处理

    单页

    多页 

    三、项目使用--代码部分

    四、报错解决


    前言

    • 使用vue-pdf组件实现文件预览功能 并在文件上增加操作按钮
    • vue3不支持vue-pdf,vue3项目用pdfjs-dist

     

    一、安装npm 依赖

    1、在根目录下输入一下命令

    1. npm i pdfjs-dist@2.5.207 --save
    2. npm i vue-pdf@4.2.0 --save

    2、修改pacakge.json文件 

    1. "dependencies": {
    2. "pdfjs-dist": "2.5.207",
    3. "vue-pdf": "4.2.0",
    4. },

    二、引入组件

    1. import pdf from 'vue-pdf'
    2. export default {
    3. name: 'App',
    4. components: {
    5. pdf
    6. },
    7. ···
    8. }

    1、html中使用组件

    单页

    :src="file">

    多页 

    for="i in pageNum" :key="i" :src="file" :page="i">

    2、数据处理

    单页

    1. export default {
    2. ···
    3. data () {
    4. return {
    5. file: "/pdf/test.pdf"
    6. }
    7. }
    8. }

    多页 

    1. export default {
    2. ···
    3. data () {
    4. return {
    5. file: "/pdf/test.pdf",
    6. pageNum: 1
    7. }
    8. },
    9. methods: {
    10. getPageNum () {
    11. let loadingTask = pdf.createLoadingTask(this.file)
    12. loadingTask.promise.then(pdf => {
    13. this.pageNum = pdf.numPages
    14. }).catch(err => {
    15. console.error('pdf加载失败', err);
    16. })
    17. }
    18. },
    19. mounted () {
    20. this.getPageNum()
    21. }
    22. }

    三、项目使用--代码部分

    1. <template>
    2. <div class="pdf_wrap">
    3. <pdf class="pdfView" v-for="item in pageNum" :key="item" :src="pdfUrl" :page="item">pdf>
    4. <div class="btnCont">
    5. <div class="savebtn"
    6. @click="sign">确认div>
    7. div>
    8. div>
    9. template>
    10. <script>
    11. import pdf from 'vue-pdf'
    12. import { protocolGet } from "../../../api/validation/shareagreement";//调用的接口
    13. export default {
    14. components: {
    15. pdf
    16. },
    17. props: {},
    18. data() {
    19. return {
    20. title: this.$route.meta?.title || '',
    21. pdfUrl:'',
    22. pageNum: 1
    23. }
    24. },
    25. watch: {},
    26. computed: {},
    27. methods: {
    28. getprotocolGet(){
    29. protocolGet().then((res)=>{
    30. if(res.code==200){
    31. this.pdfUrl= res.data.contractUrl//获取到的协议展示
    32. this.getPageNum();//pdf分页处理
    33. }
    34. })
    35. },
    36. getPageNum () {
    37. let loadingTask = pdf.createLoadingTask(this.pdfUrl,{withCredentials: false})
    38. loadingTask.promise.then(pdf => {
    39. this.pageNum = pdf.numPages
    40. }).catch(err => {
    41. console.error('pdf加载失败', err);
    42. })
    43. },
    44. sign() {
    45. this.$router.push({
    46. path: '/xxx',
    47. })
    48. },
    49. },
    50. created() {
    51. this.getprotocolGet()
    52. },
    53. mounted() {
    54. },
    55. }
    56. script>
    57. <style>
    58. .pdf_wrap{
    59. height: 100%;
    60. padding-bottom: 1.4rem;
    61. background-color: #fff;
    62. }
    63. style>
    64. <style scoped>
    65. .pdf_wrap .btnCont {
    66. position: fixed;
    67. bottom: 0rem;
    68. left: 0;
    69. background-color: #fff;
    70. padding: 0.1rem 0 .40rem 0;
    71. width: 100%;
    72. border: 0;
    73. text-align: center;
    74. }
    75. .pdf_wrap .btnCont .savebtn{
    76. color: #fff;
    77. display: inline-block;
    78. height: 0.8rem;
    79. line-height: 0.8rem;
    80. border-radius: 0.4rem;
    81. width: 6.9rem;
    82. margin: auto;
    83. font-size: 0.28rem;
    84. background-color: #ff0b95;
    85. }
    86. style>

    四、报错解决

    1、这种情况就是跨域了找后台解决一下即可

    2、 这种情况是pdf还没加载出来就去渲染导致页面pageNum找不到,调用接口加载完成后再去渲染pageNum

     

    3、报这个错误加上  {withCredentials: false} ,报错就没有了

     

  • 相关阅读:
    zk羊群效应怎么处理
    AIS数据下载并处理(python)
    顺应电商趋势,B2B平台深受制造业商家青睐
    数据结构之散列查找
    定时删除指定目录下的文件,文件名按时间有规律,定时删除过期文件
    zcu106 lwip搭建以太网配置寄存器
    数据结构初阶--堆排序+TOPK问题
    伪类应用——
    使用HHDBCS管理MongoDB
    广东全链功能集群 林裕豪:解读建设农业龙头企业总部基地
  • 原文地址:https://blog.csdn.net/m0_55969466/article/details/126033955