vue3+vite实现在线预览pdf功能

http://www.cppcns.com/wangluo/javascript/636424.html

<template>
     <div class="pdf-preview">
         <div class="pdf-wrap">
             <vue-pdf-embed :source="state.source" :style="scale" class="vue-pdf-embed" :page="state.pageNum" />
         </div>
         <div class="page-tool">
             <div class="page-tool-item" @click="lastPage()">上一页</div>
             <div class="page-tool-item" @click="nextPage()">下一页</div>
             <div class="page-tool-item">{{state.pageNum}}/{{state.numPages}}</div>
             <div class="page-tool-item" @click="pageZoomOut()">放大</div>
             <div class="page-tool-item" @click="pageZoomIn()">缩小</div>
             <div class="page-tool-item" @click="$emit('close')">关闭</div>
         </div>
     </div>
</template>
<script setup lang="ts">
import VuePdfEmbed from "vue-pdf-embed";
//import { createLoadingTask } from "vue3-pdfjs/esm/vue-pdf.js";
import * as pdfjsLib from "pdfjs-dist";
import { reactive, onMounted, computed } from "vue";
 
const props = defineProps({
     pdfUrl: {
         type: String,
         required: true
     }
})
 
 
const state = reactive({
     source: props.pdfUrl, //预览pdf文件地址
     pageNum: 1, //当前页面
     scale: 1, // 缩放比例
     numPages: 0, // 总页数
});
const scale = computed(() => `transform:scale(${state.scale})`)
function lastPage() {
     if (state.pageNum > 1) {
         state.pageNum -= 1;
     }
}
function nextPage() {
     if (state.pageNum < state.numPages) {
         state.pageNum += 1;
     }
}
function pageZoomOut() {
     if (state.scale < 2) {
         state.scale += 0.1;
     }
}
function pageZoomIn() {
     if (state.scale > 0.8) {
         state.scale -= 0.1;
     }
}
onMounted(() => {
     pdfjsLib.GlobalWorkerOptions.workerSrc = "./pdf.worker.js";
     const loadingTask = pdfjsLib.getDocument(state.source);
     loadingTask.promise.then((pdf) => {
         state.numPages = pdf.numPages;
     });
});
 
</script>
<style lang="css" scoped>
.pdf-preview {
     position: fixed;
     height: 100vh;
     width: 100vw;
     padding: 20px 0;
     box-sizing: border-box;
     background-color: #e9e9e9;
     left: 0;
     top: 0;
     z-index: 99999999;
     overflow-y: auto;
}
 
.pdf-wrap {
     overflow-y: auto;
}
 
.vue-pdf-embed {
     text-align: center;
     width: 60vw;
     border: 1px solid #e5e5e5;
     margin: 0 auto;
     box-sizing: border-box;
}
 
.page-tool {
     position: fixed;
     bottom: 35px;
     padding-left: 15px;
     padding-right: 15px;
     display: Flex;
     align-items: center;
     background: rgb(66, 66, 66);
     border-radius: 19px;
     z-index: 100;
     cursor: pointer;
     margin-left: 50%;
     transform: translateX(-50%);
}
 
.page-tool-item {
     padding: 8px 15px;
     padding-left: 10px;
     cursor: pointer;
     color: #fff !important;
}
</style>
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现Vue3 + Vite + Electron的打印功能,你可以按照以下步骤进行。 1. 安装Electron 在项目中安装Electron,你可以使用npm命令进行安装: ``` npm install electron --save-dev ``` 2. 创建Electron应用程序 在应用程序的主目录中创建一个名为main.js的文件,并在其中创建一个Electron应用程序: ```javascript const { app, BrowserWindow } = require('electron') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadURL('http://localhost:3000') win.webContents.on('did-finish-load', () => { win.webContents.print() }) } app.on('ready', createWindow) ``` 在这个示例中,我们创建了一个Electron窗口,并在窗口加载完成时执行打印操作。 3. 打印Vue3组件 在Vue3组件中,你可以使用window.print()方法来实现打印功能。例如,在一个名为PrintButton.vue的组件中: ```html <template> <button @click="print">打印</button> </template> <script> export default { methods: { print() { window.print() } } } </script> ``` 在这个示例中,我们在组件中创建了一个打印按钮,并在按钮点击时执行打印操作。 4. 运行应用程序 现在,你可以在终端运行Electron应用程序,并访问http://localhost:3000来测试打印功能: ``` electron . ``` 如果一切正常,你应该能够在Electron窗口中看到你的Vue3应用程序,并且能够通过按钮打印内容。 这就是使用Vue3 + Vite + Electron实现打印功能的基本步骤。当然,你还可以根据自己的需求进行更多的定制和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就躺了吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值