当前位置:   article > 正文

vue-pdf如何使用?在vue2项目中pdf预览的具体组件化方法

vue-pdf

最近在项目里遇到很多pdf预览的功能,也试过很多插件,都有这样那样的问题,最终还是选择的vue-pdf这个插件,其中也遇到了问题,最终抽离成了一个组件,可以直接使用。

首次下载vue-pdf,如果直接下载的话 ,使用过程会报错,原因是版本和node版本不契合,不支持导致的。

这里就遇到过这个报错:

Cannot read properties of undefined (reading 'catch')"  found in  ---> <ResizeSensor> at node_modules/vue-resize-sensor/src/resize-sensor.vue

最终解决方案:重新下载指定版本的 vue-pdf;

1  下载vue-pdf,以及对应的依赖

npm install vue-pdf@4.2.0 pdfjs-dist@2.5.207

2 抽离pdf预览,pdf查看组件,命名为 pdfindex.vue

  1. <template>
  2. <div class="pdf_wrap">
  3. <div class="pdf_list">
  4. <!-- src:pdf地址,page: 当前显示页 -->
  5. <pdf v-for="i in numPages" :key="i" :src="src" :page="i" style="width: 100%" > </pdf>
  6. </div>
  7. <div class="close" @click="closePdf">
  8. 关闭
  9. </div>
  10. </div>
  11. </template>
  12. <script>
  13. import pdf from 'vue-pdf';
  14. export default {
  15. components: {
  16. pdf,
  17. },
  18. props: {
  19. pdfurl: {
  20. type: String,
  21. },
  22. },
  23. data () {
  24. return {
  25. src: '',
  26. numPages: undefined,
  27. }
  28. },
  29. mounted () {
  30. this.loadPdf(this.pdfurl)
  31. },
  32. methods: {
  33. loadPdf (url) {
  34. this.src = pdf.createLoadingTask(url)
  35. this.src.promise.then(pdf => {
  36. this.numPages = pdf.numPages // 这里拿到当前pdf总页数
  37. })
  38. },
  39. closePdf() {
  40. this.$emit('closePdf')
  41. }
  42. }
  43. }
  44. </script>
  45. <style scoped>
  46. .pdf_wrap {
  47. background: #fff;
  48. height: 100vh;
  49. position: relative;
  50. }
  51. .pdf_list {
  52. height: 100vh;
  53. overflow: scroll;
  54. }
  55. .close {
  56. position: absolute;
  57. left: 0;
  58. bottom: 0;
  59. height: 40px;
  60. width: 100%;
  61. line-height: 40px;
  62. text-align: center;
  63. color:#367CFD;
  64. font-size:12px;
  65. background: #fff;
  66. }
  67. </style>

3.  在需要用到pdf预览的页面  引入组件,我这里讲组件放在了弹窗中,点击显示,又给pdf组件本身添加了一个关闭弹窗的方法 :closePdf,  通过this.$emit('closePdf')     传值父组件关闭弹窗;

  1. <van-popup v-model="showPicker" position="bottom">
  2. <pdf :pdfurl="pdfurl" @closePdf="closePdf"></pdf>
  3. </van-popup>
  4. import pdf from './pdfindex.vue';
  5. export default {
  6. computed: {
  7. ...mapGetters(["userInfo", "project"]),
  8. },
  9. data() {
  10. return {
  11. data:'',
  12. showPicker:false,
  13. pdfurl:'admin/sys-file/iipi/ade2a43b970b4b3ab46a03cad4af52ba.pdf',
  14. };
  15. },
  16. methods:{
  17. closePdf() {
  18. this.showPicker =false;
  19. },
  20. }

最终效果

页面1

页面2

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

闽ICP备14008679号