123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <template>
- <div class="pdf-viewer">
- <div class="pdf-content">
- <canvas ref="pdfCanvas"></canvas>
- </div>
- <div class="pagination">
- <button @click="prevPage">上一页</button>
- <span>{{ pageNum }} / {{ pageCount }}</span>
- <button @click="nextPage">下一页</button>
- <!-- 添加返回按钮 -->
- <button @click="goBack">返回</button>
- </div>
- </div>
- </template>
- <script>
- window.pdfjsLib = pdfjsLib
- pdfjsLib.GlobalWorkerOptions.workerSrc =
- 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.worker.min.js'
- export default {
- data() {
- return {
- dialogVisible: false,
- pdfDoc: null,
- pageNum: 1,
- pageCount: 0,
- pdfUrl: ''
- }
- },
- watch: {
- // 观察 pdfUrl 的变化
- pdfUrl(newVal) {
- console.log(newVal,'newVal');
-
- if (newVal !== this.pdfUrl) {
- this.dialogVisible = false
- this.openPdf();
- }
- }
- },
- mounted() {
-
- this.pdfUrl = this.$route.query.url || ''; // 假设pdfUrl是通过查询参数传递的
- console.log( this.pdfUrl,' this.pdfUrl1111111');
- this.openPdf()
- },
- methods: {
- goBack(){
- this.dialogVisible = false
- this.$router.go(-1)
- },
- openPdf() {
- this.dialogVisible = true
- this.loadPdf()
- },
- closeDialog() {
- this.pdfDoc = null
- this.pageNum = 1
- },
- async loadPdf() {
- try {
- // 加载 PDF 文档
- const loadingTask = pdfjsLib.getDocument(this.pdfUrl)
- this.pdfDoc = await loadingTask.promise
- this.pageCount = this.pdfDoc.numPages
- this.renderPage(this.pageNum)
- } catch (error) {
- this.$message.error('加载 PDF 失败: ' + error.message)
- }
- },
- async renderPage(num) {
- try {
- const page = await this.pdfDoc.getPage(num)
- const canvas = this.$refs.pdfCanvas
- const ctx = canvas.getContext('2d')
- const viewport = page.getViewport({ scale:1 })
- canvas.height = viewport.height
- canvas.width = viewport.width
- await page.render({
- canvasContext: ctx,
- viewport: viewport
- }).promise
- } catch (error) {
- this.$message.error('渲染 PDF 页面失败: ' + error.message)
- }
- },
- prevPage() {
- if (this.pageNum <= 1) return
- this.pageNum--
- this.renderPage(this.pageNum)
- },
- nextPage() {
- if (this.pageNum >= this.pageCount) return
- this.pageNum++
- this.renderPage(this.pageNum)
- }
- }
- }
- </script>
- <style scoped>
- .pdf-viewer {
- display: flex;
- flex-direction: column;
- height: 100vh; /* 或者固定高度如 800px */
- text-align: center;
- }
- .pdf-content {
- flex: 1;
- overflow: auto; /* 内容超出时显示滚动条 */
- border: 1px solid #ddd;
- margin-bottom: 10px;
- }
- .pagination {
- display: flex;
- justify-content: center;
- align-items: center;
- gap: 20px;
- padding: 10px;
- background: #f5f5f5;
- position: sticky;
- bottom: 0;
- }
- </style>
|