@toolspack/ttd-pdfjs 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,415 +1,417 @@
1
- <template>
2
- <div class="pdf-view" :style="style">
3
- <div class="pdf-view-control" v-if="showPages">
4
- <switch-page ref="switchPage" :scale='compuscale' :numPages="page_count"
5
- :page="page" :zoomEnable="zoomEnable" :rotateEnable="rotateEnable"
6
- @page="onChangePage" @zoom="onScale" @rotate="onRotate"></switch-page>
7
- </div>
8
- <div class="pdf-view-area-wapper">
9
- <div>
10
- <div
11
- class="center pdf-view-area"
12
- @drop="onDrop"
13
- @dragover="onDragOver"
14
- :key="pdfurl"
15
- :style="{'border': border?'1px solid #666': ''}"
16
- v-if="pdfurl"
17
- >
18
- <div v-if="fileLoading" class="pdf-view-loading">文件加载中...</div>
19
- <div v-else-if="pageRendering" class="pdf-view-rendering">内容渲染中...</div>
20
- <canvas :key="pdfurl +'canvas'" class="canvasstyle" ref="canvas"></canvas>
21
- <div class="label-area">
22
- <slot></slot>
23
- </div>
24
- </div>
25
- <div v-else class="pdf-view-empty">未找到资源,请联系管理员!</div>
26
- </div>
27
- </div>
28
- </div>
29
- </template>
30
- <script>
31
-
32
- import { Message } from 'element-ui';
33
- import SwitchPage from './SwitchPage.vue'
34
-
35
- function getChromeVersion() {
36
- const arr = navigator.userAgent.split(' ');
37
- let chromeVersion = '';
38
- for (let i = 0; i < arr.length; i++) {
39
- if (/chrome/i.test(arr[i])) chromeVersion = arr[i]
40
- }
41
- if (chromeVersion) {
42
- return Number(chromeVersion.split('/')[1].split('.')[0]);
43
- }
44
- return false;
45
- }
46
- let version = ''
47
- if (getChromeVersion()) {
48
- version = getChromeVersion();
49
- if (version < 98) {
50
- Message({
51
- message: `您使用的谷歌浏览器版本过低【version:${version}】,为了更好地体验请将浏览器升级到最新版本!`,
52
- type: 'error',
53
- duration: 1800,
54
- })
55
- }
56
- }
57
-
58
- // const PDFJS = require('pdfjs-dist/legacy/build/pdf.js')
59
- const PDFJS = require('pdfjs-dist')
60
-
61
- const defautScale = 1.0
62
- // PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/legacy/build/pdf.worker.min.js')
63
- PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js')
64
- // https://unpkg.com/pdfjs-dist@2.16.105/cmaps/
65
- // const cMapUrl = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.11.174/cmaps/'
66
- // 使用代理的cmaps,会导致加载很慢,改用本地
67
-
68
- const cMapUrl = 'https://wsp.totodi.com/staticfiles_web/web/pdfjs/cmaps/'
69
-
70
- export const maxscale = 3
71
- export const minscale = 0.2
72
-
73
- export default {
74
- components: { SwitchPage },
75
- props: {
76
- pdfurl: {
77
- default: '',
78
- },
79
- scale: {
80
- type: Number,
81
- default: defautScale,
82
- },
83
- showPages: {
84
- type: [String, Number, Boolean],
85
- default: true,
86
- },
87
- zoomEnable: {
88
- type: [String, Number, Boolean],
89
- default: false,
90
- },
91
- rotateEnable: {
92
- type: [String, Number, Boolean],
93
- default: false,
94
- },
95
- border: {
96
- type: [String, Number, Boolean],
97
- default: true,
98
- },
99
- marginAuto: {
100
- type: [String, Number, Boolean],
101
- default: false,
102
- },
103
- page: {
104
- type: [String, Number],
105
- default: 1,
106
- },
107
- showWidth: {
108
- type: [String, Number],
109
- default: 0,
110
- },
111
- },
112
- data() {
113
- return {
114
- pdfDoc: null, // pdfjs 生成的对象
115
- viewport: null,
116
- pageNum: 1, // 当前页数
117
- pageRendering: false,
118
- fileLoading: true,
119
- pageNumPending: null,
120
- compuscale: defautScale, // 放大倍数
121
- compuRotate: undefined, // 实际旋转度数, 默认值必须是 undefined
122
- page_count: 0, // 总页数
123
- maxscale, // 最大放大倍数
124
- minscale, // 最小放大倍数
125
- isready: false,
126
- initPage: true, // 初始化页面
127
- style: {
128
- width: '860px', // 先给个默认值,当渲染后,后自动按实际值渲染,否则打标签那里,会显示异常
129
- margin: this.marginAuto === '' || this.marginAuto ? '0 auto' : '0',
130
- },
131
- }
132
- },
133
- methods: {
134
- async renderPage(num) {
135
- console.log('renderPage ', this.pageRendering)
136
- if (this.pageRendering) {
137
- this.pageNumPending = num;
138
- } else {
139
- // 渲染pdf
140
- const vm = this
141
- this.pageRendering = true
142
- // Using promise to fetch the page
143
- if (!this.pdfDoc) {
144
- return false
145
- }
146
- try {
147
- const page = await this.pdfDoc.getPage(num)
148
- let scaleNum = vm.compuscale
149
- let viewport = ''
150
- const viewboxWidth = this.showWidth
151
- if (this.initPage) {
152
- viewport = page.getViewport({ scale: 1.0 })
153
- if (viewboxWidth) {
154
- const desiredWidth = parseInt(viewboxWidth, 10) - 2
155
- // 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
156
- scaleNum = desiredWidth / viewport.width
157
- this.compuscale = scaleNum
158
- this.maxscale = scaleNum
159
- }
160
- // console.log('xxxxxx', this.compuRotate, viewport.rotation)
161
- this.compuRotate = viewport.rotation
162
- this.initPage = false
163
- }
164
- // 重新渲染 缩放过的PDF
165
- viewport = page.getViewport({ scale: scaleNum, rotation: this.compuRotate })
166
- this.viewport = viewport
167
-
168
- // 将 canvas 尺寸 传给父组件
169
- this.$emit('size', viewport, num)
170
-
171
- // Render PDF page into canvas context
172
- vm.isready = true
173
-
174
- const { canvas } = vm.$refs
175
-
176
- this.style.width = `${viewport.width + 2}px`;
177
- canvas.height = viewport.height
178
- canvas.width = viewport.width
179
-
180
- const renderContext = {
181
- canvasContext: canvas.getContext('2d'),
182
- viewport,
183
- }
184
- // Wait for rendering to finish
185
- await page.render(renderContext).promise
186
- // console.log(' await page.render 168')
187
- vm.pageRendering = false
188
- if (vm.pageNumPending !== null) {
189
- // New page rendering is pending
190
- vm.renderPage(vm.pageNumPending)
191
- vm.pageNumPending = null
192
- }
193
- this.$emit('renderSuccess')
194
- } catch (error) {
195
- console.error(error)
196
- } finally {
197
- // console.log('finally 178')
198
- this.pageRendering = false
199
- }
200
- }
201
- },
202
- prev() {
203
- // 上一页
204
- if (this.pageNum <= 1) {
205
- return
206
- }
207
- this.pageNum--
208
- this.queueRenderPage(this.pageNum)
209
- },
210
- next() {
211
- // 下一页
212
- if (this.pageNum >= this.page_count) {
213
- return
214
- }
215
- this.pageNum++
216
- this.queueRenderPage(this.pageNum)
217
- },
218
- onChangePage(page) {
219
- this.emitPage(page)
220
- // switch page 改变页码
221
- this.queueRenderPage(page)
222
- },
223
- emitPage(page) {
224
- this.$emit('pageChange', page, this.page_count, page === this.page_count)
225
- },
226
- closepdf() {
227
- // 关闭PDF
228
- if (this.pdfDoc) {
229
- if (this.viewport) {
230
- const { canvas } = this.$refs
231
- if (canvas) {
232
- const cxt = canvas.getContext('2d')
233
- cxt.clearRect(0, 0, this.viewport.width, this.viewport.height);
234
- }
235
- }
236
- this.viewport = null
237
- this.pdfDoc.destroy();
238
- // console.log('closepdf end')
239
- }
240
- // this.pdfDoc = null
241
- this.isready = false
242
- this.compuscale = this.scale
243
- this.$emit('closepdf')
244
- },
245
- queueRenderPage(num) {
246
- // console.log('queueRenderPage 226', this.pageRendering)
247
- if (this.pageRendering) {
248
- this.pageNumPending = num
249
- } else {
250
- this.renderPage(num)
251
- }
252
- },
253
- async loadUrl(url) {
254
- if (!PDFJS) {
255
- return false
256
- }
257
- this.fileLoading = true
258
- // 此处无法确定,到底是否使用encodeURI
259
- // var reg = /[\u4e00-\u9fa5]+/
260
- // if (reg.test(url)) {
261
- // url = encodeURI(url)
262
- // console.log('-----encodeURI------', url)
263
- // }
264
- console.log('----PdfView---', url)
265
- if (this.pdfDoc) {
266
- // console.log('pdfDocument is ready destroy,,')
267
- this.pdfDoc.destroy();
268
- }
269
- let pdfDoc_
270
- try {
271
- pdfDoc_ = await PDFJS.getDocument({
272
- url: encodeURI(url),
273
- cMapUrl,
274
- cMapPacked: true,
275
- }).promise
276
- } catch (error) {
277
- console.error(error)
278
-
279
- const pdfData = await fetch(
280
- new URL(url, window.location).href,
281
- );
282
- const arrayBufferPdf = await pdfData.arrayBuffer(); // 转成 ArrayBuffer 塞给 pdf.js
283
- pdfDoc_ = await PDFJS.getDocument({ data: arrayBufferPdf }).promise;
284
- } finally {
285
- this.fileLoading = false
286
- }
287
- // console.log('pdfDoc_', pdfDoc_)
288
- // debugger
289
- this.pdfDoc = pdfDoc_
290
- // 初始化pdf
291
- this.page_count = pdfDoc_.numPages
292
- this.$emit('numPages', pdfDoc_.numPages)
293
- // console.log('265', this.pageRendering)
294
- this.renderPage(this.pageNum)
295
- this.emitPage(this.pageNum)
296
- },
297
- onDrop(event) {
298
- this.$emit('drop', event)
299
- },
300
- onDragOver(event) {
301
- // 默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
302
- // 这要通过调用 ondragover 事件的 event.preventDefault() 方法:
303
- event.preventDefault()
304
- },
305
- updateScale() {
306
- this.compuscale = this.scale
307
- // console.log('updateScale 278')
308
- this.renderPage(this.pageNum)
309
- },
310
- onScale(scale) {
311
- this.compuscale = scale
312
- this.renderPage(this.pageNum)
313
- },
314
- onRotate(rotate) {
315
- this.compuRotate += rotate
316
- this.renderPage(this.pageNum)
317
- },
318
- },
319
- mounted() {
320
- },
321
- beforeDestroy() {
322
- // console.log('---', this.pdfDoc)
323
- if (this.pdfDoc) {
324
- this.closepdf();
325
- }
326
- },
327
- watch: {
328
- scale: {
329
- handler(val) {
330
- if (val) {
331
- this.compuscale = val
332
- }
333
- },
334
- immediate: true,
335
- },
336
- pdfurl: {
337
- handler(val) {
338
- // console.log('watch url change: ', val)
339
- if (this.pdfDoc) {
340
- // console.log('closepdf')
341
- this.closepdf();
342
- }
343
- this.$nextTick(() => {
344
- if (val) {
345
- this.pageNum = 1
346
- this.initPage = true
347
- this.loadUrl(val)
348
- }
349
- if (this.showPages) {
350
- this.$refs.switchPage.setPage(1)
351
- }
352
- })
353
- },
354
- immediate: true,
355
- },
356
- // 监听页码变化,渲染对应合同页
357
- page(newPage, oldPage) {
358
- // console.log('watch page change: ', newPage)
359
- if (this.pdfDoc) {
360
- this.queueRenderPage(newPage)
361
- } else {
362
- this.pageNum = newPage
363
- // console.log('no pdfDoc')
364
- }
365
- },
366
- },
367
- }
368
- </script>
369
-
370
- <style lang="less" scoped>
371
- .pdf-view {
372
- height: 100%;
373
- width: 100%;
374
- display: flex;
375
- flex-direction: column;
376
- }
377
- .pdf-view-control {
378
- text-align: center;
379
- margin: 10px 0;
380
- }
381
- .pdf-view-area-wapper {
382
- flex: 1 1 0%;
383
- overflow: auto;
384
- width: 100%;
385
- flex-shrink: 0%;
386
- }
387
- .pdf-view-area {
388
- position: relative;
389
- min-height: 100px;
390
- .canvasstyle {
391
- display: block;
392
- margin: 0 auto;
393
- }
394
- .label-area {
395
- position: absolute;
396
- right: 0;
397
- bottom: 0;
398
- top: 0;
399
- left: 0;
400
- }
401
- }
402
- .pdf-view-empty {
403
- text-align: center;
404
- line-height: 150px;
405
- font-size: 14px;
406
- color: #999;
407
- }
408
-
409
- .pdf-view-loading, .pdf-view-rendering {
410
- margin-top: 40px;
411
- text-align: center;
412
- font-size: 14px;
413
- color: #999;
414
- }
415
- </style>
1
+ <template>
2
+ <div class="pdf-view" :style="style">
3
+ <div class="pdf-view-control" v-if="showPages">
4
+ <switch-page ref="switchPage" :scale='compuscale' :numPages="page_count"
5
+ :page="page" :zoomEnable="zoomEnable" :rotateEnable="rotateEnable"
6
+ @page="onChangePage" @zoom="onScale" @rotate="onRotate"></switch-page>
7
+ </div>
8
+ <div class="pdf-view-area-wapper" :width="pdfWidth">
9
+ <div>
10
+ <div
11
+ class="center pdf-view-area"
12
+ @drop="onDrop"
13
+ @dragover="onDragOver"
14
+ :key="pdfurl"
15
+ :style="{'border': border?'1px solid #666': ''}"
16
+ v-if="pdfurl"
17
+ >
18
+ <div v-if="fileLoading" class="pdf-view-loading">文件加载中...</div>
19
+ <div v-else-if="pageRendering" class="pdf-view-rendering">内容渲染中...</div>
20
+ <canvas :key="pdfurl +'canvas'" class="canvasstyle" ref="canvas"></canvas>
21
+ <div class="label-area">
22
+ <slot></slot>
23
+ </div>
24
+ </div>
25
+ <div v-else class="pdf-view-empty">未找到资源,请联系管理员!</div>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </template>
30
+ <script>
31
+
32
+ import { Message } from 'element-ui';
33
+ import SwitchPage from './SwitchPage.vue'
34
+
35
+ function getChromeVersion() {
36
+ const arr = navigator.userAgent.split(' ');
37
+ let chromeVersion = '';
38
+ for (let i = 0; i < arr.length; i++) {
39
+ if (/chrome/i.test(arr[i])) chromeVersion = arr[i]
40
+ }
41
+ if (chromeVersion) {
42
+ return Number(chromeVersion.split('/')[1].split('.')[0]);
43
+ }
44
+ return false;
45
+ }
46
+ let version = ''
47
+ if (getChromeVersion()) {
48
+ version = getChromeVersion();
49
+ if (version < 98) {
50
+ Message({
51
+ message: `您使用的谷歌浏览器版本过低【version:${version}】,为了更好地体验请将浏览器升级到最新版本!`,
52
+ type: 'error',
53
+ duration: 1800,
54
+ })
55
+ }
56
+ }
57
+
58
+ // const PDFJS = require('pdfjs-dist/legacy/build/pdf.js')
59
+ const PDFJS = require('pdfjs-dist')
60
+
61
+ const defautScale = 1.0
62
+ // PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/legacy/build/pdf.worker.min.js')
63
+ PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js')
64
+ // https://unpkg.com/pdfjs-dist@2.16.105/cmaps/
65
+ // const cMapUrl = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.11.174/cmaps/'
66
+ // 使用代理的cmaps,会导致加载很慢,改用本地
67
+
68
+ const cMapUrl = 'https://wsp.totodi.com/staticfiles_web/web/pdfjs/cmaps/'
69
+
70
+ export const maxscale = 3
71
+ export const minscale = 0.2
72
+
73
+ export default {
74
+ components: { SwitchPage },
75
+ props: {
76
+ pdfurl: {
77
+ default: '',
78
+ },
79
+ scale: {
80
+ type: Number,
81
+ default: defautScale,
82
+ },
83
+ showPages: {
84
+ type: [String, Number, Boolean],
85
+ default: true,
86
+ },
87
+ zoomEnable: {
88
+ type: [String, Number, Boolean],
89
+ default: false,
90
+ },
91
+ rotateEnable: {
92
+ type: [String, Number, Boolean],
93
+ default: false,
94
+ },
95
+ border: {
96
+ type: [String, Number, Boolean],
97
+ default: true,
98
+ },
99
+ marginAuto: {
100
+ type: [String, Number, Boolean],
101
+ default: false,
102
+ },
103
+ page: {
104
+ type: [String, Number],
105
+ default: 1,
106
+ },
107
+ showWidth: {
108
+ type: [String, Number],
109
+ default: 0,
110
+ },
111
+ },
112
+ data() {
113
+ return {
114
+ pdfDoc: null, // pdfjs 生成的对象
115
+ viewport: null,
116
+ pageNum: 1, // 当前页数
117
+ pageRendering: false,
118
+ fileLoading: true,
119
+ pageNumPending: null,
120
+ compuscale: defautScale, // 放大倍数
121
+ compuRotate: undefined, // 实际旋转度数, 默认值必须是 undefined
122
+ page_count: 0, // 总页数
123
+ maxscale, // 最大放大倍数
124
+ minscale, // 最小放大倍数
125
+ isready: false,
126
+ initPage: true, // 初始化页面
127
+ style: {
128
+ width: '860px', // 先给个默认值,当渲染后,后自动按实际值渲染,否则打标签那里,会显示异常
129
+ margin: this.marginAuto === '' || this.marginAuto ? '0 auto' : '0',
130
+ },
131
+ pdfWidth: '858px',
132
+ }
133
+ },
134
+ methods: {
135
+ async renderPage(num) {
136
+ console.log('renderPage ', this.pageRendering)
137
+ if (this.pageRendering) {
138
+ this.pageNumPending = num;
139
+ } else {
140
+ // 渲染pdf
141
+ const vm = this
142
+ this.pageRendering = true
143
+ // Using promise to fetch the page
144
+ if (!this.pdfDoc) {
145
+ return false
146
+ }
147
+ try {
148
+ const page = await this.pdfDoc.getPage(num)
149
+ let scaleNum = vm.compuscale
150
+ let viewport = ''
151
+ const viewboxWidth = this.showWidth
152
+ if (this.initPage) {
153
+ viewport = page.getViewport({ scale: 1.0 })
154
+ if (viewboxWidth) {
155
+ const desiredWidth = parseInt(viewboxWidth, 10) - 2
156
+ // 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
157
+ scaleNum = desiredWidth / viewport.width
158
+ this.compuscale = scaleNum
159
+ this.maxscale = scaleNum
160
+ }
161
+ // console.log('xxxxxx', this.compuRotate, viewport.rotation)
162
+ this.compuRotate = viewport.rotation
163
+ this.initPage = false
164
+ }
165
+ // 重新渲染 缩放过的PDF
166
+ viewport = page.getViewport({ scale: scaleNum, rotation: this.compuRotate })
167
+ this.viewport = viewport
168
+
169
+ // canvas 尺寸 传给父组件
170
+ this.$emit('size', viewport, num)
171
+
172
+ // Render PDF page into canvas context
173
+ vm.isready = true
174
+
175
+ const { canvas } = vm.$refs
176
+ this.style.width = `${viewport.width + 2}px`;
177
+ this.pdfWidth = `${viewport.width}px`;
178
+ canvas.height = viewport.height
179
+ canvas.width = viewport.width
180
+
181
+ const renderContext = {
182
+ canvasContext: canvas.getContext('2d'),
183
+ viewport,
184
+ }
185
+ // Wait for rendering to finish
186
+ await page.render(renderContext).promise
187
+ // console.log(' await page.render 168')
188
+ vm.pageRendering = false
189
+ if (vm.pageNumPending !== null) {
190
+ // New page rendering is pending
191
+ vm.renderPage(vm.pageNumPending)
192
+ vm.pageNumPending = null
193
+ }
194
+ this.$emit('renderSuccess')
195
+ } catch (error) {
196
+ console.error(error)
197
+ } finally {
198
+ // console.log('finally 178')
199
+ this.pageRendering = false
200
+ }
201
+ }
202
+ },
203
+ prev() {
204
+ // 上一页
205
+ if (this.pageNum <= 1) {
206
+ return
207
+ }
208
+ this.pageNum--
209
+ this.queueRenderPage(this.pageNum)
210
+ },
211
+ next() {
212
+ // 下一页
213
+ if (this.pageNum >= this.page_count) {
214
+ return
215
+ }
216
+ this.pageNum++
217
+ this.queueRenderPage(this.pageNum)
218
+ },
219
+ onChangePage(page) {
220
+ this.emitPage(page)
221
+ // switch page 改变页码
222
+ this.queueRenderPage(page)
223
+ },
224
+ emitPage(page) {
225
+ this.$emit('pageChange', page, this.page_count, page === this.page_count)
226
+ },
227
+ closepdf() {
228
+ // 关闭PDF
229
+ if (this.pdfDoc) {
230
+ if (this.viewport) {
231
+ const { canvas } = this.$refs
232
+ if (canvas) {
233
+ const cxt = canvas.getContext('2d')
234
+ cxt.clearRect(0, 0, this.viewport.width, this.viewport.height);
235
+ }
236
+ }
237
+ this.viewport = null
238
+ this.pdfDoc.destroy();
239
+ // console.log('closepdf end')
240
+ }
241
+ // this.pdfDoc = null
242
+ this.isready = false
243
+ this.compuscale = this.scale
244
+ this.$emit('closepdf')
245
+ },
246
+ queueRenderPage(num) {
247
+ // console.log('queueRenderPage 226', this.pageRendering)
248
+ if (this.pageRendering) {
249
+ this.pageNumPending = num
250
+ } else {
251
+ this.renderPage(num)
252
+ }
253
+ },
254
+ async loadUrl(url) {
255
+ if (!PDFJS) {
256
+ return false
257
+ }
258
+ this.fileLoading = true
259
+ // 此处无法确定,到底是否使用encodeURI
260
+ // var reg = /[\u4e00-\u9fa5]+/
261
+ // if (reg.test(url)) {
262
+ // url = encodeURI(url)
263
+ // console.log('-----encodeURI------', url)
264
+ // }
265
+ console.log('----PdfView---', url)
266
+ if (this.pdfDoc) {
267
+ // console.log('pdfDocument is ready destroy,,')
268
+ this.pdfDoc.destroy();
269
+ }
270
+ let pdfDoc_
271
+ try {
272
+ pdfDoc_ = await PDFJS.getDocument({
273
+ url: encodeURI(url),
274
+ cMapUrl,
275
+ cMapPacked: true,
276
+ }).promise
277
+ } catch (error) {
278
+ console.error(error)
279
+
280
+ const pdfData = await fetch(
281
+ new URL(url, window.location).href,
282
+ );
283
+ const arrayBufferPdf = await pdfData.arrayBuffer(); // 转成 ArrayBuffer 塞给 pdf.js
284
+ pdfDoc_ = await PDFJS.getDocument({ data: arrayBufferPdf }).promise;
285
+ } finally {
286
+ this.fileLoading = false
287
+ }
288
+ // console.log('pdfDoc_', pdfDoc_)
289
+ // debugger
290
+ this.pdfDoc = pdfDoc_
291
+ // 初始化pdf
292
+ this.page_count = pdfDoc_.numPages
293
+ this.$emit('numPages', pdfDoc_.numPages)
294
+ // console.log('265', this.pageRendering)
295
+ this.renderPage(this.pageNum)
296
+ this.emitPage(this.pageNum)
297
+ },
298
+ onDrop(event) {
299
+ this.$emit('drop', event)
300
+ },
301
+ onDragOver(event) {
302
+ // 默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
303
+ // 这要通过调用 ondragover 事件的 event.preventDefault() 方法:
304
+ event.preventDefault()
305
+ },
306
+ updateScale() {
307
+ this.compuscale = this.scale
308
+ // console.log('updateScale 278')
309
+ this.renderPage(this.pageNum)
310
+ },
311
+ onScale(scale) {
312
+ this.compuscale = scale
313
+ this.renderPage(this.pageNum)
314
+ },
315
+ onRotate(rotate) {
316
+ this.compuRotate += rotate
317
+ this.renderPage(this.pageNum)
318
+ },
319
+ },
320
+ mounted() {
321
+ },
322
+ beforeDestroy() {
323
+ // console.log('---', this.pdfDoc)
324
+ if (this.pdfDoc) {
325
+ this.closepdf();
326
+ }
327
+ },
328
+ watch: {
329
+ scale: {
330
+ handler(val) {
331
+ if (val) {
332
+ this.compuscale = val
333
+ }
334
+ },
335
+ immediate: true,
336
+ },
337
+ pdfurl: {
338
+ handler(val) {
339
+ // console.log('watch url change: ', val)
340
+ if (this.pdfDoc) {
341
+ // console.log('closepdf')
342
+ this.closepdf();
343
+ }
344
+ this.$nextTick(() => {
345
+ if (val) {
346
+ this.pageNum = 1
347
+ this.initPage = true
348
+ this.loadUrl(val)
349
+ }
350
+ if (this.showPages) {
351
+ this.$refs.switchPage.setPage(1)
352
+ }
353
+ })
354
+ },
355
+ immediate: true,
356
+ },
357
+ // 监听页码变化,渲染对应合同页
358
+ page(newPage, oldPage) {
359
+ // console.log('watch page change: ', newPage)
360
+ if (this.pdfDoc) {
361
+ this.queueRenderPage(newPage)
362
+ } else {
363
+ this.pageNum = newPage
364
+ // console.log('no pdfDoc')
365
+ }
366
+ },
367
+ },
368
+ }
369
+ </script>
370
+
371
+ <style lang="less" scoped>
372
+ .pdf-view {
373
+ height: 100%;
374
+ width: 100%;
375
+ display: flex;
376
+ flex-direction: column;
377
+ min-width: 688px;
378
+ }
379
+ .pdf-view-control {
380
+ text-align: center;
381
+ margin: 10px 0;
382
+ }
383
+ .pdf-view-area-wapper {
384
+ flex: 1 1 0%;
385
+ overflow: auto;
386
+ width: 100%;
387
+ flex-shrink: 0%;
388
+ }
389
+ .pdf-view-area {
390
+ position: relative;
391
+ min-height: 100px;
392
+ .canvasstyle {
393
+ display: block;
394
+ margin: 0 auto;
395
+ }
396
+ .label-area {
397
+ position: absolute;
398
+ right: 0;
399
+ bottom: 0;
400
+ top: 0;
401
+ left: 0;
402
+ }
403
+ }
404
+ .pdf-view-empty {
405
+ text-align: center;
406
+ line-height: 150px;
407
+ font-size: 14px;
408
+ color: #999;
409
+ }
410
+
411
+ .pdf-view-loading, .pdf-view-rendering {
412
+ margin-top: 40px;
413
+ text-align: center;
414
+ font-size: 14px;
415
+ color: #999;
416
+ }
417
+ </style>