zhaoxiaoqiang
2022-08-04 8951553d20b1307bfb3281743c77db55f65de792
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<!--
 * @Author: 小明丶
 * @Date: 2020-07-01 19:52:15
 * @LastEditors: zxq
 * @LastEditTime: 2022-06-16 16:42:41
 * @Description: 
--> 
<template>
  <div class="cpdf" id="cpdf">
    <div class="center">
      <!-- <div class="contor">
        <button @click="prev">上一页</button>
        <button @click="next">下一页</button>
        <span>Page: <span v-text="page_num"></span> / <span v-text="page_count"></span></span>
 
        <button @click="addscale" >加</button>
        <button @click="minus" >减</button>
        <button id="prev" @click="closepdf">关闭</button>
      </div> -->
      <!-- <canvas class="canvasstyle" id="the-canvas"></canvas> -->
      <canvas id="the-canvas" style="border:1px  solid black"></canvas>
    </div>
  </div>
</template>
<script>
// import PDFJS from "pdfjs-dist";
// import { TextLayerBuilder } from "pdfjs-dist/web/pdf_viewer";
// import "pdfjs-dist/web/pdf_viewer.css";
// PDFJS.GlobalWorkerOptions.workerSrc = "pdfjs-dist/build/pdf.worker.js";
 
var container;
export default {
  name: "c-pdf",
  props: {
    msg: String
  },
  mounted() {
    // this.$nextTick(() => {
    //     let url =
    //     "http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf";
    //     this.getPDF(url);
    // });
  },
  methods: {
    async getPDF(url) {
        let pdf = await PDFJS.getDocument(url)
        container = container || document.querySelector('#container')
        for(let i = 0; i < pdf.numPages; i++) {
            try{
                await this.rendPDF(pdf, i)
            } catch(e) {
                // console.error(e)
            }
        }
    },
    // async renderPDF(pdf, num) {
    //     let page = await pdf.getPage(num)
    //     // 设置展示比例
    //     let scale = 1.5;
    //     let viewport = page.getViewport(scale);
 
    //     let pageDiv = document.createElement('div');
    //     pageDiv.setAttribute('id', 'page-' + (page.pageIndex + 1));
    //     pageDiv.setAttribute('style', 'position: relative');
    //     container.appendChild(pageDiv);
 
    //     let canvas = document.createElement('canvas');
    //     pageDiv.appendChild(canvas);
    //     let context = canvas.getContext('2d');
    //     canvas.height = viewport.height;
    //     canvas.width = viewport.width;
        
    //     let renderContext = {
    //         canvasContext: context,
    //         viewport: viewport
    //     };
        
    //     await page.render(renderContext);
    //     let textContent = await page.getTextContent()
    //     // 创建文本图层div
    //     const textLayerDiv = document.createElement('div');
    //     textLayerDiv.setAttribute('class', 'textLayer');
    //     textLayerDiv.setAttribute('style', `width: ${viewport.width}px; margin: 0 auto;`)
    //     // 将文本图层div添加至每页pdf的div中
    //     pageDiv.appendChild(textLayerDiv);
        
    //     // 创建新的TextLayerBuilder实例
    //     var textLayer = new TextLayerBuilder({
    //         textLayerDiv: textLayerDiv,
    //         pageIndex: page.pageIndex,
    //         viewport: viewport
    //     });
        
    //     textLayer.setTextContent(textContent);
        
    //     textLayer.render();
 
    // }
  }
};
 
</script>
<style type="text/less" lang="less" rel="stylesheet/less">
  .cpdf {
    position: fixed;
    top: 0;
    left: 0;
    background-color: rgba(0, 0, 0, .5);
    width: 100%;
    height: 100%;
    z-index: 99999;
    display: flex;
    justify-content: center;
    align-items: center;
    .center {
      text-align: center;
      height: 100%;
      overflow: auto;
      padding-top: 20px;
      .contor {
        margin-bottom: 10px;
      }
    }
  }
</style>