@toolspack/ttd-pdfjs 0.0.10 → 0.1.0
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.
- package/README.md +3 -1
- package/lib/ttd-pdfjs.common.js +2301 -992
- package/lib/ttd-pdfjs.umd.js +2301 -992
- package/lib/ttd-pdfjs.umd.min.js +5 -5
- package/package.json +1 -1
- package/src/packages/pdfjs/PdfView216.vue +47 -13
- package/src/packages/pdfjs/SwitchPage.vue +139 -27
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="pdf-view">
|
|
3
3
|
<div class="pdf-view-control" v-if="showPages">
|
|
4
|
-
<switch-page ref="switchPage"
|
|
4
|
+
<switch-page ref="switchPage" :scale='compuscale' :rotate="compuRotate" :numPages="page_count"
|
|
5
|
+
:gage="page" :zoomEnable="zoomEnable" :rotateEnable="rotateEnable"
|
|
6
|
+
@page="onChangePage" @zoom="onScale" @rotate="onRotate"></switch-page>
|
|
5
7
|
</div>
|
|
6
8
|
<div class="pdf-view-area-wapper">
|
|
7
9
|
<div :style="style">
|
|
@@ -57,6 +59,7 @@ if (getChromeVersion()) {
|
|
|
57
59
|
const PDFJS = require('pdfjs-dist')
|
|
58
60
|
|
|
59
61
|
const defautScale = 1.0
|
|
62
|
+
const defaultRotate = 0
|
|
60
63
|
// PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/legacy/build/pdf.worker.min.js')
|
|
61
64
|
PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js')
|
|
62
65
|
// https://unpkg.com/pdfjs-dist@2.16.105/cmaps/
|
|
@@ -65,6 +68,9 @@ PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.j
|
|
|
65
68
|
|
|
66
69
|
const cMapUrl = 'https://wsp.totodi.com/staticfiles_web/web/pdfjs/cmaps/'
|
|
67
70
|
|
|
71
|
+
export const maxscale = 3
|
|
72
|
+
export const minscale = 0.2
|
|
73
|
+
|
|
68
74
|
export default {
|
|
69
75
|
components: { SwitchPage },
|
|
70
76
|
props: {
|
|
@@ -75,10 +81,23 @@ export default {
|
|
|
75
81
|
type: Number,
|
|
76
82
|
default: defautScale,
|
|
77
83
|
},
|
|
84
|
+
|
|
85
|
+
rotate: {
|
|
86
|
+
type: Number,
|
|
87
|
+
default: defaultRotate,
|
|
88
|
+
},
|
|
78
89
|
showPages: {
|
|
79
90
|
type: [String, Number, Boolean],
|
|
80
91
|
default: true,
|
|
81
92
|
},
|
|
93
|
+
zoomEnable: {
|
|
94
|
+
type: [String, Number, Boolean],
|
|
95
|
+
default: false,
|
|
96
|
+
},
|
|
97
|
+
rotateEnable: {
|
|
98
|
+
type: [String, Number, Boolean],
|
|
99
|
+
default: false,
|
|
100
|
+
},
|
|
82
101
|
border: {
|
|
83
102
|
type: [String, Number, Boolean],
|
|
84
103
|
default: true,
|
|
@@ -105,9 +124,10 @@ export default {
|
|
|
105
124
|
fileLoading: true,
|
|
106
125
|
pageNumPending: null,
|
|
107
126
|
compuscale: defautScale, // 放大倍数
|
|
127
|
+
compuRotate: 0, // 实际旋转度数
|
|
108
128
|
page_count: 0, // 总页数
|
|
109
|
-
maxscale
|
|
110
|
-
minscale
|
|
129
|
+
maxscale, // 最大放大倍数
|
|
130
|
+
minscale, // 最小放大倍数
|
|
111
131
|
isready: false,
|
|
112
132
|
initPage: true, // 初始化页面
|
|
113
133
|
style: {
|
|
@@ -144,7 +164,7 @@ export default {
|
|
|
144
164
|
this.maxscale = scaleNum
|
|
145
165
|
}
|
|
146
166
|
// 重新渲染 缩放过的PDF
|
|
147
|
-
viewport = page.getViewport({ scale: scaleNum })
|
|
167
|
+
viewport = page.getViewport({ scale: scaleNum, rotation: this.compuRotate })
|
|
148
168
|
this.viewport = viewport
|
|
149
169
|
|
|
150
170
|
// 将 canvas 尺寸 传给父组件
|
|
@@ -289,13 +309,16 @@ export default {
|
|
|
289
309
|
// console.log('updateScale 278')
|
|
290
310
|
this.renderPage(this.pageNum)
|
|
291
311
|
},
|
|
312
|
+
onScale(scale) {
|
|
313
|
+
this.compuscale = scale
|
|
314
|
+
this.renderPage(this.pageNum)
|
|
315
|
+
},
|
|
316
|
+
onRotate(rotate) {
|
|
317
|
+
this.compuRotate = rotate
|
|
318
|
+
this.renderPage(this.pageNum)
|
|
319
|
+
},
|
|
292
320
|
},
|
|
293
321
|
mounted() {
|
|
294
|
-
this.compuscale = this.scale
|
|
295
|
-
// this.initPage = true
|
|
296
|
-
// if (this.pdfurl) {
|
|
297
|
-
// this.loadUrl(this.pdfurl)
|
|
298
|
-
// }
|
|
299
322
|
},
|
|
300
323
|
beforeDestroy() {
|
|
301
324
|
// console.log('---', this.pdfDoc)
|
|
@@ -304,10 +327,21 @@ export default {
|
|
|
304
327
|
}
|
|
305
328
|
},
|
|
306
329
|
watch: {
|
|
307
|
-
scale
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
330
|
+
scale: {
|
|
331
|
+
handler(val) {
|
|
332
|
+
if (val) {
|
|
333
|
+
this.compuscale = val
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
immediate: true,
|
|
337
|
+
},
|
|
338
|
+
rotate: {
|
|
339
|
+
handler(val) {
|
|
340
|
+
if (val) {
|
|
341
|
+
this.compuRotate = val
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
immediate: true,
|
|
311
345
|
},
|
|
312
346
|
pdfurl: {
|
|
313
347
|
handler(val) {
|
|
@@ -1,79 +1,191 @@
|
|
|
1
1
|
<template lang="html">
|
|
2
2
|
<div class="switch-page">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</
|
|
3
|
+
<div class='switch-page-btn'>
|
|
4
|
+
<el-button size="mini" @click="switchPage('prev')" icon=el-icon-arrow-up>上一页</el-button>
|
|
5
|
+
<el-button size="mini" @click="switchPage('next')" icon=el-icon-arrow-down>下一页</el-button>
|
|
6
|
+
<span style="margin-left: 6px">
|
|
7
|
+
<el-input v-model.number="itemPage" style="width: 50px;margin: 0 4px; font-size:14px;" size="mini"
|
|
8
|
+
@keyup.native.enter="goPage" @change="goPage"></el-input>/{{numPages}}
|
|
9
|
+
</span>
|
|
10
|
+
</div>
|
|
11
|
+
<div class='switch-page-scale'>
|
|
12
|
+
<el-button size="mini" :disabled="!zoomEnable" @click="zoomIn" icon=el-icon-minus></el-button>
|
|
13
|
+
<el-button size="mini" :disabled="!zoomEnable" @click="zoomOut" icon=el-icon-plus></el-button>
|
|
14
|
+
<el-select v-model="itemScale" :disabled="!zoomEnable" @change=onZoomChange size="mini" style="margin-left:10px" placeholder="请选择">
|
|
15
|
+
<el-option
|
|
16
|
+
v-for="item in EnumOptions"
|
|
17
|
+
:key="item.value"
|
|
18
|
+
:label="item.label"
|
|
19
|
+
:value="item.value">
|
|
20
|
+
</el-option>
|
|
21
|
+
</el-select>
|
|
22
|
+
</div>
|
|
23
|
+
<div class='switch-page-rotate'>
|
|
24
|
+
<el-button size="mini" @click="rotateRight" :disabled="!rotateEnable" icon=el-icon-refresh-right>顺时针旋转</el-button>
|
|
25
|
+
<el-button size="mini" @click="rotateLeft" :disabled="!rotateEnable" icon=el-icon-refresh-left>逆时针旋转</el-button>
|
|
26
|
+
</div>
|
|
11
27
|
</div>
|
|
12
28
|
</template>
|
|
13
29
|
|
|
14
30
|
<script>
|
|
31
|
+
import { maxscale, minscale } from './PdfView216.vue'
|
|
32
|
+
|
|
33
|
+
export const EnumOptions = [
|
|
34
|
+
// { label: '自动缩放', value: '' },
|
|
35
|
+
// { label: '实际大小', value: '' },
|
|
36
|
+
// { label: '适合页面', value: '' },
|
|
37
|
+
// { label: '适合页宽', value: 'auto' },
|
|
38
|
+
{ label: '50%', value: '50%' },
|
|
39
|
+
{ label: '75%', value: '75%' },
|
|
40
|
+
{ label: '100%', value: '100%' },
|
|
41
|
+
{ label: '125%', value: '125%' },
|
|
42
|
+
{ label: '150%', value: '150%' },
|
|
43
|
+
{ label: '200%', value: '200%' },
|
|
44
|
+
{ label: '300%', value: '300%' },
|
|
45
|
+
]
|
|
15
46
|
export default {
|
|
16
47
|
name: 'switch-page',
|
|
17
48
|
props: {
|
|
18
49
|
numPages: {
|
|
19
50
|
type: [Number, String],
|
|
20
51
|
},
|
|
52
|
+
page: {
|
|
53
|
+
type: [Number, String],
|
|
54
|
+
default: 1,
|
|
55
|
+
},
|
|
56
|
+
scale: {
|
|
57
|
+
type: [Number],
|
|
58
|
+
default: 1,
|
|
59
|
+
},
|
|
60
|
+
rotate: {
|
|
61
|
+
type: [Number],
|
|
62
|
+
default: 0,
|
|
63
|
+
},
|
|
64
|
+
zoomEnable: {
|
|
65
|
+
type: [String, Number, Boolean],
|
|
66
|
+
default: false,
|
|
67
|
+
},
|
|
68
|
+
rotateEnable: {
|
|
69
|
+
type: [String, Number, Boolean],
|
|
70
|
+
default: false,
|
|
71
|
+
},
|
|
21
72
|
},
|
|
22
73
|
data() {
|
|
23
74
|
return {
|
|
24
|
-
|
|
25
|
-
|
|
75
|
+
itemPage: '', // 内部保存的页码,
|
|
76
|
+
EnumOptions,
|
|
77
|
+
itemScale: 'auto',
|
|
78
|
+
itemRotate: 0,
|
|
26
79
|
}
|
|
27
80
|
},
|
|
28
81
|
watch: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
82
|
+
page: {
|
|
83
|
+
handler(value) {
|
|
84
|
+
this.itemPage = value
|
|
85
|
+
},
|
|
86
|
+
immediate: true,
|
|
87
|
+
},
|
|
88
|
+
numPages: {
|
|
89
|
+
handler(value) {
|
|
90
|
+
this.itemPage = 1
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
scale: {
|
|
94
|
+
handler(value) {
|
|
95
|
+
this.itemScale = `${Math.round(value * 100)}%`
|
|
96
|
+
},
|
|
97
|
+
immediate: true,
|
|
98
|
+
},
|
|
99
|
+
rotate: {
|
|
100
|
+
handler(value) {
|
|
101
|
+
this.itemRotate = value
|
|
102
|
+
},
|
|
103
|
+
immediate: true,
|
|
32
104
|
},
|
|
33
105
|
},
|
|
34
106
|
methods: {
|
|
35
107
|
switchPage(str) {
|
|
36
108
|
if (str === 'prev') {
|
|
37
|
-
if (this.
|
|
109
|
+
if (this.itemPage === 1) {
|
|
38
110
|
return
|
|
39
111
|
}
|
|
40
|
-
this.
|
|
112
|
+
this.itemPage--
|
|
41
113
|
}
|
|
42
114
|
if (str === 'next') {
|
|
43
|
-
if (this.
|
|
115
|
+
if (this.itemPage === this.numPages) {
|
|
44
116
|
this.$message({ message: '当前已是最后一页', type: 'warning' })
|
|
45
117
|
return
|
|
46
118
|
}
|
|
47
|
-
this.
|
|
119
|
+
this.itemPage++
|
|
48
120
|
}
|
|
49
|
-
this.$emit('page', this.
|
|
121
|
+
this.$emit('page', this.itemPage)
|
|
50
122
|
},
|
|
51
123
|
setPage(page = 1) {
|
|
52
|
-
this.
|
|
124
|
+
this.itemPage = page
|
|
53
125
|
},
|
|
54
126
|
goPage() {
|
|
55
127
|
if (this.itemPage > 0) {
|
|
56
128
|
if (this.itemPage >= this.numPages) {
|
|
57
|
-
this.
|
|
58
|
-
this.itemPage = this.page
|
|
59
|
-
} else {
|
|
60
|
-
this.page = this.itemPage
|
|
129
|
+
this.itemPage = this.numPages
|
|
61
130
|
}
|
|
62
|
-
|
|
131
|
+
} else {
|
|
132
|
+
this.itemPage = 1
|
|
133
|
+
}
|
|
134
|
+
this.$emit('page', this.itemPage)
|
|
135
|
+
},
|
|
136
|
+
zoomIn() {
|
|
137
|
+
let numScale = window.parseInt(this.itemScale)
|
|
138
|
+
if (Number.isNaN(numScale)) {
|
|
139
|
+
numScale = 100
|
|
140
|
+
this.itemScale = `${numScale}%`
|
|
141
|
+
this.$emit('zoom', numScale / 100)
|
|
142
|
+
}
|
|
143
|
+
if (numScale > minscale * 100) {
|
|
144
|
+
numScale -= 10
|
|
145
|
+
this.itemScale = `${numScale}%`
|
|
146
|
+
this.$emit('zoom', numScale / 100)
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
zoomOut() {
|
|
150
|
+
let numScale = window.parseInt(this.itemScale)
|
|
151
|
+
if (Number.isNaN(numScale)) {
|
|
152
|
+
numScale = 100
|
|
153
|
+
this.itemScale = `${numScale}%`
|
|
154
|
+
this.$emit('zoom', numScale / 100)
|
|
155
|
+
}
|
|
156
|
+
if (numScale < maxscale * 100) {
|
|
157
|
+
numScale += 10
|
|
158
|
+
this.itemScale = `${numScale}%`
|
|
159
|
+
this.$emit('zoom', numScale / 100)
|
|
63
160
|
}
|
|
64
161
|
},
|
|
162
|
+
onZoomChange() {
|
|
163
|
+
const numScale = window.parseInt(this.itemScale)
|
|
164
|
+
this.$emit('zoom', numScale / 100)
|
|
165
|
+
},
|
|
166
|
+
rotateRight() {
|
|
167
|
+
this.$emit('rotate', this.itemRotate + 90)
|
|
168
|
+
},
|
|
169
|
+
rotateLeft() {
|
|
170
|
+
this.$emit('rotate', this.itemRotate - 90)
|
|
171
|
+
},
|
|
65
172
|
},
|
|
66
173
|
}
|
|
67
174
|
</script>
|
|
68
175
|
|
|
69
|
-
<style lang="
|
|
176
|
+
<style lang="less" scoped>
|
|
70
177
|
.switch-page {
|
|
71
178
|
margin: 0;
|
|
72
179
|
padding: 0;
|
|
73
|
-
|
|
180
|
+
display: flex;
|
|
181
|
+
flex-direction: row;
|
|
182
|
+
.switch-page-scale{
|
|
183
|
+
flex: 1;
|
|
184
|
+
text-align: center;
|
|
185
|
+
}
|
|
74
186
|
}
|
|
75
187
|
.switch-page button {
|
|
76
|
-
font-size:
|
|
188
|
+
font-size: 14px;
|
|
77
189
|
padding: 6px !important;
|
|
78
190
|
}
|
|
79
191
|
</style>
|