@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toolspack/ttd-pdfjs",
3
- "version": "0.0.10",
3
+ "version": "0.1.0",
4
4
  "private": false,
5
5
  "main": "lib/ttd-pdfjs.umd.min.js",
6
6
  "scripts": {
@@ -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" @page="onChangePage" :numPages="page_count"></switch-page>
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: 1.5, // 最大放大倍数
110
- minscale: 0.8, // 最小放大倍数
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(val) {
308
- if (val) {
309
- this.compuscale = val
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
- <el-button size="mini" @click="switchPage('prev')"><i class="el-icon-caret-left"></i></el-button>
4
- <el-button size="mini" @click="switchPage('next')"><i class="el-icon-caret-right"></i></el-button>
5
- <span style="margin-left: 10px;">{{page}}/{{numPages}}</span>
6
- <span style="margin-left: 6px">
7
- 跳转至
8
- <el-input v-model.number="itemPage" style="width: 50px;margin: 0 4px" size="mini" @keyup.native.enter="goPage"></el-input>
9
-
10
- </span>
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
- page: 1,
25
- itemPage: '',
75
+ itemPage: '', // 内部保存的页码,
76
+ EnumOptions,
77
+ itemScale: 'auto',
78
+ itemRotate: 0,
26
79
  }
27
80
  },
28
81
  watch: {
29
- numPages() {
30
- this.page = 1
31
- this.itemPage = ''
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.page === 1) {
109
+ if (this.itemPage === 1) {
38
110
  return
39
111
  }
40
- this.page--
112
+ this.itemPage--
41
113
  }
42
114
  if (str === 'next') {
43
- if (this.page === this.numPages) {
115
+ if (this.itemPage === this.numPages) {
44
116
  this.$message({ message: '当前已是最后一页', type: 'warning' })
45
117
  return
46
118
  }
47
- this.page++
119
+ this.itemPage++
48
120
  }
49
- this.$emit('page', this.page)
121
+ this.$emit('page', this.itemPage)
50
122
  },
51
123
  setPage(page = 1) {
52
- this.page = page
124
+ this.itemPage = page
53
125
  },
54
126
  goPage() {
55
127
  if (this.itemPage > 0) {
56
128
  if (this.itemPage >= this.numPages) {
57
- this.page = this.numPages
58
- this.itemPage = this.page
59
- } else {
60
- this.page = this.itemPage
129
+ this.itemPage = this.numPages
61
130
  }
62
- this.$emit('page', this.page)
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="css" scoped>
176
+ <style lang="less" scoped>
70
177
  .switch-page {
71
178
  margin: 0;
72
179
  padding: 0;
73
- overflow: auto;
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: 16px;
188
+ font-size: 14px;
77
189
  padding: 6px !important;
78
190
  }
79
191
  </style>