@toolspack/ttd-pdfjs 0.1.3 → 0.1.5

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