zb-admin/src/views/other/print/index.vue

111 lines
4.5 KiB
Vue
Raw Normal View History

2022-03-25 07:23:57 +00:00
<template>
<PageWrapLayout>
<div id="wrap" style="margin-bottom: 20px">
<div>
<el-button type="primary" @click="print(1)" >打印图片</el-button>
<el-button type="primary" @click="print(2)">打印Json数据</el-button>
<el-button type="primary" @click="print(3)">打印HTML</el-button>
</div>
<div style="margin-top: 20px">
2022-09-29 14:04:17 +00:00
<img :src="logo" style="width: 200px" />
</div>
<div id="tableBox">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180" />
<el-table-column prop="name" label="名字" width="180" />
<el-table-column prop="address" label="地址" />
</el-table>
</div>
2022-04-26 07:32:51 +00:00
</div>
<el-descriptions title="配置项 " :column="1" border class="descriptions">
<el-descriptions-item label="官方文档"> <a href="https://github.com/crabbly/Print.js" target="_blank">https://github.com/crabbly/Print.js</a> </el-descriptions-item>
<el-descriptions-item label="printable"> 文档来源pdf或图像的urlhtml元素的id或json数据的对象 </el-descriptions-item>
<el-descriptions-item label="type"> 可打印类型可用的打印选项包括pdfhtmlimagejson和raw-html </el-descriptions-item>
<el-descriptions-item label="documentTitle"> 打印htmlimage或json时它将显示为文档标题如果用户尝试将打印作业保存为pdf文件它也将是文档的名称 </el-descriptions-item>
<el-descriptions-item label="scanStyles">设置为false时库不会处理应用于正在打印的html的样式使用css参数时很有用 </el-descriptions-item>
<el-descriptions-item label="targetStyle"> 默认情况下在打印HTML元素时库仅处理某些样式此选项允许您传递要处理的样式数组例如['padding-top''border-bottom'] </el-descriptions-item>
<el-descriptions-item label="gridHeaderStyle"> 打印JSON数据时网格标题的可选样式 </el-descriptions-item>
<el-descriptions-item label="properties"> 在打印JSON时使用这些是对象属性名称 </el-descriptions-item>
<el-descriptions-item label="honorColor"> 要以彩色打印文本请将此属性设置为true默认情况下所有文本都将以黑色打印 </el-descriptions-item>
<el-descriptions-item label="css"> 这允许我们传递一个或多个应该应用于正在打印的html的css文件URL值可以是包含单个URL的字符串也可以是包含多个URL的数组 </el-descriptions-item>
</el-descriptions>
</PageWrapLayout>
2022-03-25 07:23:57 +00:00
</template>
<script lang="ts" setup>
import printJS from 'print-js'
import '@/utils/Print'
2022-12-15 13:28:19 +00:00
import logo from '@/assets/image/logo.png'
2022-03-25 07:23:57 +00:00
const tableData = [
{
date: '2016-05-03',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-02',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-04',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-01',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
]
const print = (type) => {
2022-03-25 07:23:57 +00:00
switch (type) {
case 1:
printJS({
type: 'image',
2022-09-29 14:04:17 +00:00
printable: [logo],
documentTitle: '打印图片',
2022-03-25 07:23:57 +00:00
})
break
2022-03-25 07:23:57 +00:00
case 2:
printJS({
type: 'json',
2022-03-25 07:23:57 +00:00
documentTitle: '打印表格',
printable: tableData,
gridStyle: 'text-align: center;border: 1px solid lightgray;font-size: 12px;',
properties: [
{ field: 'date', displayName: '日期' },
{ field: 'name', displayName: '名字' },
{ field: 'address', displayName: '地址' },
],
})
break
2022-03-25 07:23:57 +00:00
case 3:
// printJS({
// type: 'wrap',
// documentTitle: '打印页面',
// printable: "tableBox",
// scanStyles:false,
// targetStyles: ['*'], // 允许打印所有样式属性
// honorColor: true, // 是否打印彩色文本
// style: '@page {margin: 0 10mm};', // 不打印页眉和页脚
// gridStyle: 'border: 1px solid lightgray;font-size: 12px;',
// })
Print('#wrap', {
onStart: function () {
console.log('onStart', new Date())
},
onEnd: function () {
console.log('onEnd', new Date())
}
})
break
2022-03-25 07:23:57 +00:00
}
}
</script>
<style></style>