当前位置:   article > 正文

vue预览本地pdf文件方法之vue-pdf组件

vue预览本地pdf文件方法之vue-pdf组件

照抄例子:https://www.cnblogs.com/steamed-twisted-roll/p/9648255.html

1、npm安装

npm install --save vue-pdf

2、页面引入

3、具体实现

  1. <div class="pdf" v-show="fileType === 'pdf'">
  2. <p class="arrow">
  3. <span @click="changePdfPage(0)" class="turn"
  4. :class="{grey: currentPage==1}">Preview</span>
  5. {{currentPage}} / {{pageCount}}
  6. <span @click="changePdfPage(1)" class="turn"
  7. :class="{grey: currentPage==pageCount}">Next</span>
  8. </p>
  9. <pdf :src="pdfSrc" :page="currentPage" @num-pages="pageCount=$event"
  10. @page-loaded="currentPage=$event" @loaded="loadPdfHandler">
  11. </pdf>
  12. </div>

4、method方法

  1. // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
  2. changePdfPage (val) {
  3. // console.log(val)
  4. if (val === 0 && this.currentPage > 1) {
  5. this.currentPage--
  6. // console.log(this.currentPage)
  7. }
  8. if (val === 1 && this.currentPage < this.pageCount) {
  9. this.currentPage++
  10. // console.log(this.currentPage)
  11. }
  12. },
  13. // pdf加载时
  14. loadPdfHandler (e) {
  15. this.currentPage = 1 // 加载的时候先加载第一页
  16. },

5、完整代码:

  1. <template>
  2. <div>
  3. <div style="text-align: left;">
  4. <H2>行业资料</H2>
  5. <el-divider>
  6. </el-divider>
  7. <el-container>
  8. <el-aside width="300px" style="border: 1px solid #eee;height: 1000px; background-color: #D3DCE6;">
  9. <div class="myTree">
  10. <el-tree default-expand-all :props="defaultProps" :data="tableData" @node-click="handleNodeClick"></el-tree>
  11. </div>
  12. </el-aside>
  13. <el-container style="border: 1px solid #eee;margin-left: 10px;">
  14. <div class="pdf" v-show="fileType === 'pdf'">
  15. <p class="arrow">
  16. <span :class="{grey: currentPage==1}" @click="changePdfPage(0)" class="turn">Preview</span>
  17. {{currentPage}} / {{pageCount}}
  18. <span :class="{grey: currentPage==pageCount}" @click="changePdfPage(1)" class="turn">Next</span>
  19. </p>
  20. <pdf
  21. :page="currentPage"
  22. :src="pdfSrc"
  23. @loaded="loadPdfHandler"
  24. @num-pages="pageCount=$event"
  25. @page-loaded="currentPage=$event">
  26. </pdf>
  27. </div>
  28. </el-container>
  29. </el-container>
  30. </div>
  31. </div>
  32. </template>
  33. <script>
  34. import pdf from 'vue-pdf'
  35. export default {
  36. name: "IndustryInformation",
  37. components: {pdf},
  38. data(){
  39. return {
  40. currentPage: 0, // pdf文件页码
  41. pageCount: 0, // pdf文件总页数
  42. fileType: 'pdf', // 文件类型
  43. pdfSrc: '', // pdf文件地址
  44. defaultProps: {
  45. children: 'children',
  46. label: 'name'
  47. },
  48. tableData: [{
  49. id: 1,
  50. name: '道路工程资料',
  51. children:[
  52. {
  53. id: 2,
  54. name: '公路工程资料编制概述',
  55. children:[
  56. {
  57. id: 21,
  58. name: '路面工程部分分项划分表',
  59. src: '/1.pdf',
  60. },
  61. {
  62. id: 13,
  63. name: '一般建设项目单位工程划分表',
  64. src: '/2.pdf',
  65. },
  66. {
  67. id: 14,
  68. name: '路基工程部分分项划分表',
  69. src: '/3.pdf',
  70. },
  71. {
  72. id: 33,
  73. name: '桥梁工程部分分项划分表',
  74. src: '/4.pdf',
  75. },
  76. {
  77. id: 34,
  78. name: '隧道工程部分分项划分表',
  79. src: '/5.pdf',
  80. }
  81. ]
  82. },
  83. {
  84. id: 3,
  85. name: '公路工程竣工资料',
  86. children:[
  87. {
  88. id: 7,
  89. name: '公路工程竣工文件编排层次',
  90. src: '/5.pdf',
  91. },
  92. {
  93. id: 8,
  94. name: '工程洽商记录表',
  95. src: '/4.pdf',
  96. },
  97. {
  98. id: 9,
  99. name: '工程设计表更、洽商一览表',
  100. src: '/3.pdf',
  101. }
  102. ]
  103. }
  104. ]}]
  105. }
  106. },
  107. methods:{
  108. // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
  109. changePdfPage(val) {
  110. // console.log(val)
  111. if (val === 0 && this.currentPage > 1) {
  112. this.currentPage--
  113. // console.log(this.currentPage)
  114. }
  115. if (val === 1 && this.currentPage < this.pageCount) {
  116. this.currentPage++
  117. // console.log(this.currentPage)
  118. }
  119. },
  120. // pdf加载时
  121. loadPdfHandler(e) {
  122. this.currentPage = 1 // 加载的时候先加载第一页
  123. },
  124. handleNodeClick(data) {
  125. this.pdfSrc = data.src;
  126. }
  127. }
  128. }
  129. </script>
  130. <style scoped>
  131. .myTree /deep/ .el-tree {
  132. position: relative;
  133. cursor: default;
  134. color: #606266;
  135. background-color: #D3DCE6;
  136. }
  137. </style>

6、最终效果

后记:主要是priview和next翻页不是我想要的效果,因此只能另寻它法。

注意:pdf文件需要放在public路径下任意文件夹中,不支持相对路径

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/172567
推荐阅读
相关标签
  

闽ICP备14008679号