提交 40f67d1e 编写于 作者: View Design's avatar View Design

Tue Mar 5 15:51:00 CST 2024 inscode

上级 79c5bd79
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
}, },
"dependencies": { "dependencies": {
"guess": "^1.0.2", "guess": "^1.0.2",
"pdfjs-dist": "^4.0.379",
"vue": "^3.2.37" "vue": "^3.2.37"
}, },
"devDependencies": { "devDependencies": {
......
<script setup>
import HelloWorld from './components/HelloWorld.vue'
import TheWelcome from './components/TheWelcome.vue'
</script>
<template> <template>
<header> <div>123
<img alt="Vue logo" class="logo" src="./assets/logo.svg" width="125" height="125" /> <PdfPreview :url="pdfUrl" />
</div>
<div class="wrapper">
<HelloWorld msg="You did it!" />
</div>
</header>
<main>
<TheWelcome />
</main>
</template> </template>
<style scoped> <script>
header { import PdfPreview from './components/PdfPreview.vue';
line-height: 1.5;
} export default {
components: {
.logo { PdfPreview,
display: block; },
margin: 0 auto 2rem; data() {
} return {
pdfUrl: 'https://file.iviewui.com/inscode/demo1.pdf',
@media (min-width: 1024px) { };
header { },
display: flex; };
place-items: center; </script>
padding-right: calc(var(--section-gap) / 2);
}
.logo {
margin: 0 2rem 0 0;
}
header .wrapper {
display: flex;
place-items: flex-start;
flex-wrap: wrap;
}
}
</style>
<template>
<div class="pdf-preview">
<canvas ref="pdfCanvas"></canvas>
</div>
</template>
<script>
import pdfjsLib from 'pdfjs-dist';
import { getDocument } from 'pdfjs-dist/build/pdf';
export default {
props: {
url: {
type: String,
required: true,
},
},
data() {
return {
loading: false,
page: 1,
scale: 1,
canvas: null,
ctx: null,
};
},
mounted() {
this.canvas = this.$refs.pdfCanvas;
this.ctx = this.canvas.getContext('2d');
this.loadPdf();
},
methods: {
async loadPdf() {
this.loading = true;
const doc = await getDocument(this.url).promise;
this.pdfDoc = doc;
this.numPages = doc.numPages;
this.renderPage(1);
},
async renderPage(pageNumber) {
if (!this.pdfDoc) {
return;
}
this.loading = true;
const page = await this.pdfDoc.getPage(pageNumber);
const viewport = page.getViewport({ scale: this.scale });
this.canvas.width = viewport.width;
this.canvas.height = viewport.height;
const renderContext = {
canvasContext: this.ctx,
viewport,
};
page.render(renderContext);
this.loading = false;
},
nextPage() {
if (this.page < this.numPages) {
this.page++;
this.renderPage(this.page);
}
},
prevPage() {
if (this.page > 1) {
this.page--;
this.renderPage(this.page);
}
},
zoomIn() {
this.scale += 0.2;
this.renderPage(this.page);
},
zoomOut() {
this.scale -= 0.2;
this.renderPage(this.page);
},
},
};
</script>
<style scoped>
.pdf-preview canvas {
display: block;
}
</style>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册