change:pdf在某些环境打包失败问题

This commit is contained in:
liyulin 2022-11-12 09:54:17 +08:00
parent a62bb83234
commit c8f81e4802
19 changed files with 269 additions and 86380 deletions

View File

@ -1,13 +1,18 @@
<template> <template>
<div class="pdf-demo"> <div class="pdf-demo">
<vue-office-pdf src="http://static.shanhuxueyuan.com/test.pdf"/> <vue-office-pdf :src="src"/>
</div> </div>
</template> </template>
<script> <script>
/* eslint-disable */ /* eslint-disable */
export default { export default {
name: "PdfDemo" name: "PdfDemo",
data(){
return {
src:'http://static.shanhuxueyuan.com/test.pdf'
}
}
} }
</script> </script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

7838
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,16 +4,18 @@
v-if="numPages" v-if="numPages"
class="vue-office-pdf-wrapper" class="vue-office-pdf-wrapper"
style="background: gray; padding: 30px 0;position: relative;"> style="background: gray; padding: 30px 0;position: relative;">
<canvas :ref="'canvas'+ page" v-for="page in numPages" :key="page" /> <canvas :ref="'canvas'+ page" v-for="page in numPages" :key="page"/>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {worker} from './worker' import {worker} from './worker'
const pdfJsLib = require('pdfjs-dist'); import {pdfjsLib} from './pdf'
const PdfJsWorker = `data:text/javascript;base64,${worker}`; import loadScript from "./utils/loadScript";
pdfJsLib.GlobalWorkerOptions.workerSrc = PdfJsWorker const pdfJsLibSrc = `data:text/javascript;base64,${pdfjsLib}`;
const PdfJsWorkerSrc = `data:text/javascript;base64,${worker}`;
export default { export default {
name: "VueOfficePdf", name: "VueOfficePdf",
props: { props: {
@ -29,21 +31,32 @@ export default {
}, },
watch: { watch: {
src() { src() {
this.init() this.checkPdfLib().then(this.init)
} }
}, },
mounted() { mounted() {
if (this.src) { if (this.src) {
this.init() this.checkPdfLib().then(this.init)
} }
}, },
methods: { methods: {
checkPdfLib() {
if (window.pdfjsLib) {
return Promise.resolve()
}
return this.installPdfScript()
},
installPdfScript() {
return loadScript(pdfJsLibSrc).then(() => {
window.pdfjsLib.GlobalWorkerOptions.workerSrc = PdfJsWorkerSrc
});
},
init() { init() {
if(!this.src){ if (!this.src) {
this.numPages = 0 this.numPages = 0
return return
} }
const loadingTask = pdfJsLib.getDocument(this.src); const loadingTask = window.pdfjsLib.getDocument(this.src);
loadingTask.promise loadingTask.promise
.then((pdfDocument) => { .then((pdfDocument) => {
this.document = pdfDocument; this.document = pdfDocument;
@ -66,10 +79,10 @@ export default {
if (this.numPages > num) { if (this.numPages > num) {
this.renderPage(num + 1); this.renderPage(num + 1);
} }
}).catch(()=>{ }).catch(() => {
}); });
}).catch(()=>{ }).catch(() => {
}); });

1
packages/pdf/src/pdf.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,13 @@
export default function (src){
return new Promise(((resolve, reject) => {
let script = document.createElement('script')
script.src = src
script.onload = function (){
resolve()
}
script.onerror = function (){
reject()
}
document.body.append(script)
}))
}