@toolspack/ttd-pdfjs 0.0.8 → 0.0.10
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/.eslintignore +2 -2
- package/README.md +14 -2
- package/lib/ttd-pdfjs.common.js +199 -267
- package/lib/ttd-pdfjs.umd.js +199 -267
- package/lib/ttd-pdfjs.umd.min.js +5 -27
- package/package.json +3 -3
- package/src/packages/pdfjs/PdfView216.vue +80 -65
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toolspack/ttd-pdfjs",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "lib/ttd-pdfjs.umd.min.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
25
|
-
"@vue/cli-plugin-babel": "~4.5.
|
|
25
|
+
"@vue/cli-plugin-babel": "~4.5.11",
|
|
26
26
|
"@vue/cli-plugin-eslint": "~4.5.11",
|
|
27
|
-
"@vue/cli-service": "
|
|
27
|
+
"@vue/cli-service": "^4.5.11",
|
|
28
28
|
"@vue/eslint-config-airbnb": "^5.3.0",
|
|
29
29
|
"babel-eslint": "^10.1.0",
|
|
30
30
|
"babel-plugin-component": "^1.1.1",
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
class="center pdf-view-area"
|
|
10
10
|
@drop="onDrop"
|
|
11
11
|
@dragover="onDragOver"
|
|
12
|
+
:key="pdfurl"
|
|
12
13
|
:style="{'border': border?'1px solid #666': ''}"
|
|
13
14
|
v-if="pdfurl"
|
|
14
15
|
>
|
|
15
16
|
<div v-if="fileLoading" class="pdf-view-loading">文件加载中...</div>
|
|
16
|
-
|
|
17
|
-
<canvas class="canvasstyle" ref="canvas"></canvas>
|
|
17
|
+
<div v-else-if="pageRendering" class="pdf-view-rendering">内容渲染中...</div>
|
|
18
|
+
<canvas :key="pdfurl +'canvas'" class="canvasstyle" ref="canvas"></canvas>
|
|
18
19
|
<div class="label-area">
|
|
19
20
|
<slot></slot>
|
|
20
21
|
</div>
|
|
@@ -56,7 +57,6 @@ if (getChromeVersion()) {
|
|
|
56
57
|
const PDFJS = require('pdfjs-dist')
|
|
57
58
|
|
|
58
59
|
const defautScale = 1.0
|
|
59
|
-
|
|
60
60
|
// PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/legacy/build/pdf.worker.min.js')
|
|
61
61
|
PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js')
|
|
62
62
|
// https://unpkg.com/pdfjs-dist@2.16.105/cmaps/
|
|
@@ -118,59 +118,67 @@ export default {
|
|
|
118
118
|
},
|
|
119
119
|
methods: {
|
|
120
120
|
async renderPage(num) {
|
|
121
|
+
console.log('renderPage ', this.pageRendering)
|
|
122
|
+
if (this.pageRendering) {
|
|
123
|
+
this.pageNumPending = num;
|
|
124
|
+
} else {
|
|
121
125
|
// 渲染pdf
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
let scaleNum = vm.compuscale
|
|
128
|
-
let viewport = ''
|
|
129
|
-
const viewboxWidth = this.showWidth
|
|
130
|
-
if (this.initPage && viewboxWidth) {
|
|
131
|
-
const desiredWidth = parseInt(viewboxWidth, 10) - 2
|
|
132
|
-
// 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
|
|
133
|
-
viewport = page.getViewport({ scale: 1.0 })
|
|
134
|
-
scaleNum = desiredWidth / viewport.width
|
|
135
|
-
this.initPage = false
|
|
136
|
-
this.compuscale = scaleNum
|
|
137
|
-
this.maxscale = scaleNum
|
|
126
|
+
const vm = this
|
|
127
|
+
this.pageRendering = true
|
|
128
|
+
// Using promise to fetch the page
|
|
129
|
+
if (!this.pdfDoc) {
|
|
130
|
+
return false
|
|
138
131
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
132
|
+
try {
|
|
133
|
+
const page = await this.pdfDoc.getPage(num)
|
|
134
|
+
let scaleNum = vm.compuscale
|
|
135
|
+
let viewport = ''
|
|
136
|
+
const viewboxWidth = this.showWidth
|
|
137
|
+
if (this.initPage && viewboxWidth) {
|
|
138
|
+
const desiredWidth = parseInt(viewboxWidth, 10) - 2
|
|
139
|
+
// 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
|
|
140
|
+
viewport = page.getViewport({ scale: 1.0 })
|
|
141
|
+
scaleNum = desiredWidth / viewport.width
|
|
142
|
+
this.initPage = false
|
|
143
|
+
this.compuscale = scaleNum
|
|
144
|
+
this.maxscale = scaleNum
|
|
145
|
+
}
|
|
146
|
+
// 重新渲染 缩放过的PDF
|
|
147
|
+
viewport = page.getViewport({ scale: scaleNum })
|
|
148
|
+
this.viewport = viewport
|
|
145
149
|
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
// 将 canvas 尺寸 传给父组件
|
|
151
|
+
this.$emit('size', viewport, num)
|
|
148
152
|
|
|
149
|
-
|
|
153
|
+
// Render PDF page into canvas context
|
|
154
|
+
vm.isready = true
|
|
150
155
|
|
|
151
|
-
|
|
152
|
-
canvas.height = viewport.height
|
|
153
|
-
canvas.width = viewport.width
|
|
156
|
+
const { canvas } = vm.$refs
|
|
154
157
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
viewport
|
|
158
|
-
}
|
|
159
|
-
const renderTask = await page.render(renderContext)
|
|
158
|
+
this.style.width = `${viewport.width + 2}px`;
|
|
159
|
+
canvas.height = viewport.height
|
|
160
|
+
canvas.width = viewport.width
|
|
160
161
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
const renderContext = {
|
|
163
|
+
canvasContext: canvas.getContext('2d'),
|
|
164
|
+
viewport,
|
|
165
|
+
}
|
|
166
|
+
// Wait for rendering to finish
|
|
167
|
+
await page.render(renderContext).promise
|
|
168
|
+
// console.log(' await page.render 168')
|
|
169
|
+
vm.pageRendering = false
|
|
170
|
+
if (vm.pageNumPending !== null) {
|
|
165
171
|
// New page rendering is pending
|
|
166
|
-
|
|
167
|
-
|
|
172
|
+
vm.renderPage(vm.pageNumPending)
|
|
173
|
+
vm.pageNumPending = null
|
|
174
|
+
}
|
|
175
|
+
this.$emit('renderSuccess')
|
|
176
|
+
} catch (error) {
|
|
177
|
+
console.error(error)
|
|
178
|
+
} finally {
|
|
179
|
+
// console.log('finally 178')
|
|
180
|
+
this.pageRendering = false
|
|
168
181
|
}
|
|
169
|
-
this.$emit('renderSuccess')
|
|
170
|
-
} catch (error) {
|
|
171
|
-
console.error(error)
|
|
172
|
-
} finally {
|
|
173
|
-
this.pageRendering = false
|
|
174
182
|
}
|
|
175
183
|
},
|
|
176
184
|
prev() {
|
|
@@ -209,13 +217,15 @@ export default {
|
|
|
209
217
|
}
|
|
210
218
|
this.viewport = null
|
|
211
219
|
this.pdfDoc.destroy();
|
|
220
|
+
// console.log('closepdf end')
|
|
212
221
|
}
|
|
213
|
-
this.pdfDoc = null
|
|
222
|
+
// this.pdfDoc = null
|
|
214
223
|
this.isready = false
|
|
215
224
|
this.compuscale = this.scale
|
|
216
225
|
this.$emit('closepdf')
|
|
217
226
|
},
|
|
218
227
|
queueRenderPage(num) {
|
|
228
|
+
// console.log('queueRenderPage 226', this.pageRendering)
|
|
219
229
|
if (this.pageRendering) {
|
|
220
230
|
this.pageNumPending = num
|
|
221
231
|
} else {
|
|
@@ -234,13 +244,12 @@ export default {
|
|
|
234
244
|
// console.log('-----encodeURI------', url)
|
|
235
245
|
// }
|
|
236
246
|
console.log('----PdfView---', url)
|
|
247
|
+
if (this.pdfDoc) {
|
|
248
|
+
// console.log('pdfDocument is ready destroy,,')
|
|
249
|
+
this.pdfDoc.destroy();
|
|
250
|
+
}
|
|
237
251
|
let pdfDoc_
|
|
238
252
|
try {
|
|
239
|
-
// const pdfData = await fetch(
|
|
240
|
-
// new URL(url, window.location).href,
|
|
241
|
-
// );
|
|
242
|
-
// const arrayBufferPdf = await pdfData.arrayBuffer(); // 转成 ArrayBuffer 塞给 pdf.js
|
|
243
|
-
// pdfDoc_ = await PDFJS.getDocument({ data: arrayBufferPdf }).promise;
|
|
244
253
|
pdfDoc_ = await PDFJS.getDocument({
|
|
245
254
|
url: encodeURI(url),
|
|
246
255
|
cMapUrl,
|
|
@@ -257,16 +266,13 @@ export default {
|
|
|
257
266
|
} finally {
|
|
258
267
|
this.fileLoading = false
|
|
259
268
|
}
|
|
260
|
-
|
|
261
|
-
//
|
|
262
|
-
if (this.pdfDoc) {
|
|
263
|
-
console.log('pdfDocument is ready destroy,,')
|
|
264
|
-
await this.closepdf();
|
|
265
|
-
this.pdfDoc = null
|
|
266
|
-
}
|
|
269
|
+
// console.log('pdfDoc_', pdfDoc_)
|
|
270
|
+
// debugger
|
|
267
271
|
this.pdfDoc = pdfDoc_
|
|
272
|
+
// 初始化pdf
|
|
268
273
|
this.page_count = pdfDoc_.numPages
|
|
269
274
|
this.$emit('numPages', pdfDoc_.numPages)
|
|
275
|
+
// console.log('265', this.pageRendering)
|
|
270
276
|
this.renderPage(this.pageNum)
|
|
271
277
|
this.emitPage(this.pageNum)
|
|
272
278
|
},
|
|
@@ -280,6 +286,7 @@ export default {
|
|
|
280
286
|
},
|
|
281
287
|
updateScale() {
|
|
282
288
|
this.compuscale = this.scale
|
|
289
|
+
// console.log('updateScale 278')
|
|
283
290
|
this.renderPage(this.pageNum)
|
|
284
291
|
},
|
|
285
292
|
},
|
|
@@ -291,7 +298,7 @@ export default {
|
|
|
291
298
|
// }
|
|
292
299
|
},
|
|
293
300
|
beforeDestroy() {
|
|
294
|
-
console.log('---', this.pdfDoc)
|
|
301
|
+
// console.log('---', this.pdfDoc)
|
|
295
302
|
if (this.pdfDoc) {
|
|
296
303
|
this.closepdf();
|
|
297
304
|
}
|
|
@@ -304,14 +311,16 @@ export default {
|
|
|
304
311
|
},
|
|
305
312
|
pdfurl: {
|
|
306
313
|
handler(val) {
|
|
314
|
+
// console.log('watch url change: ', val)
|
|
315
|
+
if (this.pdfDoc) {
|
|
316
|
+
// console.log('closepdf')
|
|
317
|
+
this.closepdf();
|
|
318
|
+
}
|
|
307
319
|
this.$nextTick(() => {
|
|
308
320
|
if (val) {
|
|
309
321
|
this.pageNum = 1
|
|
310
322
|
this.initPage = true
|
|
311
323
|
this.loadUrl(val)
|
|
312
|
-
if (this.pdfDoc) {
|
|
313
|
-
this.closepdf();
|
|
314
|
-
}
|
|
315
324
|
}
|
|
316
325
|
if (this.showPages) {
|
|
317
326
|
this.$refs.switchPage.setPage(1)
|
|
@@ -322,7 +331,13 @@ export default {
|
|
|
322
331
|
},
|
|
323
332
|
// 监听页码变化,渲染对应合同页
|
|
324
333
|
page(newPage, oldPage) {
|
|
325
|
-
|
|
334
|
+
// console.log('watch page change: ', newPage)
|
|
335
|
+
if (this.pdfDoc) {
|
|
336
|
+
this.queueRenderPage(newPage)
|
|
337
|
+
} else {
|
|
338
|
+
this.pageNum = newPage
|
|
339
|
+
// console.log('no pdfDoc')
|
|
340
|
+
}
|
|
326
341
|
},
|
|
327
342
|
},
|
|
328
343
|
}
|