vue + el-table +Print.js 实现前端打印分页多页表格

22 篇文章 1 订阅
9 篇文章 0 订阅

Print.js 官方文档:https://printjs.crabbly.com/

前言:近来项目有个需求,很简单的打印功能,但是需要纯前端来实现。

需求:一个分页表格,点击打印的时候,需要把所有的页面的数据一次性全部打印出来。

前端打印:利用浏览器的打印功能,可以把页面上的元素打印出来。

如果打印的只是屏幕上的内容,完全可以用一个大div 把元素包起来,然后打印,vue 有现成插件,(这里不做描述),如果打印内容特别宽,会出现A4 纸放不下的情况,可以采用先把打印内容转化成图片(html2canvas),然后打印图片 , 这样会等比例缩放,但是也不太好看。如果想1:1 还原,就要在设计页面的时候,按照A4 纸来设计(宽800PX 大概),样式不要写死,在打印的时候先把宽度变为800px ,然后生成图片,在打印,这样就可以1:1还原了,打印完成之后,在把页面复原。

重点:多页打印

经过读文档,print.js 有个功能是打印JSON。所以我们在打印JSON 的时候,只需要调接口拿到所有的数据,然后在打印就可以了。

    import printJS from "print-js";

代码如下:

printJS({
                        printable: result, //所有数据
                        properties: [{field: 'PatientName', displayName: '姓名'}, // 数据字段 表格头名
                            {field: 'Patient.PATIENT_ID', displayName: '病历号'},
                            {field: 'Patient.GENDER', displayName: '性别'},
                            {field: 'Patient.PHONE', displayName: '联系方式'},
                            {field: 'OperType', displayName: '术式'},
                            {field: 'TimeStr', displayName: '时间段'},
                            {field: 'AppDoctorName', displayName: '手术医生'},
                            {field: 'AlreadyPay', displayName: '是否确费'},
                            {field: 'DistributeDrugs', displayName: '是否发药'},
                        ],
                        type: 'json',
                        gridHeaderStyle: 'border: 1px solid #909399;', //表格头样式
                        gridStyle: 'border: 1px solid #909399; text-align:center;', // 表哥体样式
                        // style:'@media print{@page {size:landscape}}' //横行打印
                    })

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然可以!以下是一个使用Vue、Axios和Element UI的例子,演示如何实现.csv文件的上传: 首先,确保你已经安装了Vue、Axios和Element UI。你可以通过以下命令进行安装: ```bash npm install vue axios element-ui ``` 接下来,创建一个Vue组件,比如命名为Upload.vue。在该组件中,你可以使用`el-upload`组件来实现文件上传,`axios`来发送请求: ```vue <template> <div> <el-upload class="upload-demo" action="/upload" :on-success="handleSuccess" :before-upload="beforeUpload" :auto-upload="false" accept=".csv" > <el-button slot="trigger" size="small" type="primary">选择文件</el-button> <el-button style="margin-left: 10px;" size="small" type="success" @click="upload">上传</el-button> <div slot="tip" class="el-upload__tip">只能上传.csv文件</div> </el-upload> </div> </template> <script> import axios from 'axios'; export default { methods: { handleSuccess(response, file, fileList) { // 文件上传成功的处理逻辑 console.log(response); }, beforeUpload(file) { // 文件上传前的逻辑处理 console.log(file); }, upload() { // 手动触发文件上传 this.$refs.upload.submit(); } } } </script> <style scoped> .upload-demo { display: inline-block; margin-top: 20px; } </style> ``` 在上述代码中,`el-upload`组件用于实现文件上传,`action`属性指定了上传文件的目标地址,`:on-success`属性指定了文件上传成功后的回调函数,`:before-upload`属性指定了文件上传前的逻辑处理函数,`:accept`属性指定了只能上传.csv文件。 在`handleSuccess`函数中,你可以处理上传成功后的逻辑,比如从服务器返回的响应中获取上传后的文件信息。 在`beforeUpload`函数中,你可以对上传的文件进行一些验证,比如文件类型、大小等。 在`upload`函数中,我们通过`this.$refs.upload.submit()`来手动触发文件上传。 最后,在你的Vue应用中使用该组件即可: ```vue <template> <div> <upload></upload> </div> </template> <script> import Upload from './Upload.vue'; export default { components: { Upload } } </script> ``` 在上述代码中,我们将刚才创建的`Upload.vue`组件引入,并在模板中使用`<upload></upload>`来调用该组件。 这样,你就可以在Vue应用中实现.csv文件的上传了!记得根据你的实际需求,修改`action`属性指定的上传地址和相应的处理逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值