Vue使用两种方式打印页面数据
Vue使用两种方式打印页面数据
·
1. 使用 vue-print-nb 插件
1.1 安装 vue-print-nb
npm install vue-print-nb --save
1.2 在main.js中引入
import Print from 'vue-print-nb'
Vue.use(Print)
1.3 打印按钮绑定 handlePrint
<el-button v-print="handlePrint">打印</el-button>
1.4 在数据data中添加
data() {
return {
handlePrint: {
id: 'print',
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>,打印表格数据<style>#print {width: 100%;}<style>',
popTitle: "页眉部分",
},
}
1.5 被打印的表格,添加id对应上个步骤的id
<el-table id="print" v-loading="loading" :data="CustomerSourceList" stripe border>
<el-table-column v-if="showColumn('name')" label="名称" align="center" prop="name"/>
<el-table-column v-if="showColumn('sort')" label="排序" align="center" prop="sort" width="200" sortable/>
<el-table-column v-if="showColumn('createTime')" label="创建时间" align="center" prop="createTime" width="300" sortable/>
</el-table>
1.6 打印不全,添加样式
<style media="print">
@media print {
@page{
size: auto;
margin: 8mm 6mm;
}
html {
/*打印缩放,防止显示不全*/
zoom: 90%;
}
#print table {
table-layout: auto !important;
}
#print .el-table__header-wrapper .el-table__header {
width: 100% !important;
}
#print .el-table__body-wrapper .el-table__body {
width: 100% !important;
}
.el-table--border .el-table__cell, .el-table__body-wrapper td {
border: solid 1px #f2f2f2;
}
td.el-table__cell{
border: solid 1px #f2f2f2;
}
}
</style>
1.7 打印效果展示(选择背影图形表格就会显示背影)
1.8 打印参数配置说明
参数 | 作用 | 类型 | 可选项 | 默认值 |
---|---|---|---|---|
id | 局部打印有效,标识符 | string | - | ‘printId’ |
standard | 局部打印有效,打印的文本类型 | string | HTML5/loose/strict | html5 |
extraHead | 局部打印有效,添加在打印区域的最顶端 | string | - | - |
extraCss | 局部打印有效,为打印区域提供Stylesheet样式表 | string | - | - |
popTitle | 局部打印有效,编辑页眉的标题 | string | - | Document Title |
clickMounted | 全局有效,调用v-print绑定的按钮点击事件callback | Function | - | this.Object |
openCallback | 全局有效,调用打印时的callback | Function | - | this.Object |
closeCallback | 全局有效,调用关闭打印的callback(无法区分确认or取消) | Function | - | this.Object |
beforeOpenCallback | 全局有效,调用开始打印之前的callback | Function | - | this.Object |
preview | 全局有效,控制打印预览 | Boolean | true/false | false |
previewTitle | 编辑预览页面的预览标题 | string | - | '打印预览' |
previewPrintBtnLabel | 编辑预览页面的打印按钮文本 | string | - | '打印' |
previewBeforeOpenCallback | 调用打开预览页面之前的callback | Function | - | this.Object |
previewOpenCallback | 调用打开预览页面之后的callback | Function | - | this.Object |
url | 非局部打印有效,异步加载打印指定的URL,确保同源策略相同 | string | - | - |
asyncUrl | 非局部打印有效,异步加载打印指定的URL,确保同源策略相同 | Function | - | - |
zIndex | 预览有效,预览窗口的z-index,默认是20002,最好比默认值更高 | string,Number | - | 20002 |
2. 使用 print-js 插件
2.1 安装 vue-print-nb
npm install print-js --save
2.2 在需要打印的页面中引入
import printJS from 'print-js'
2.3 打印按钮绑定 handlePrint 事件
<el-button @click="handlePrint">打印</el-button>
2.4 添加打印事件
/** 打印按钮操作 */
handlePrint() {
let data = []
// list为要打印的数据
for (let i=0; i < this.list.length; i++) {
data.push({
field1: this.list[i].name,
field2: this.list[i].sort,
field3: this.list[i].createTime,
})
}
printJS({
type: 'json',
header: '打印表格数据',
headerStyle: 'text-align: center',
// 打印的数据
printable: data,
// 表头名称(必传),要和json中的键值对的键保持一致
properties: [
{field: 'field1', displayName: '名称', columnSize: 1},
{field: 'field2', displayName: '排序', columnSize: 1},
{field: 'field3', displayName: '创建时间', columnSize: 1}
],
// 表头的自定义样式设置
gridHeaderStyle: 'font-weight: 500; border: 1px solid lightgray; font-size: 18px; line-height: 32px;',
// 表格的自定义样式设置
gridStyle: 'text-align: center; border: 1px solid lightgray; font-size: 15px; line-height: 30px;',
})
}
2.5 打印效果展示
2.6 PringJS参数配置说明
参数 | 默认值 | 说明 |
---|---|---|
printable | null | 文档源:pdf或图像url、html元素id或json数据对象。 |
type | ‘pdf’ | 可打印类型。可用的打印选项有:pdf、html、image、json和raw html。 |
header | null | 用于HTML、图像或JSON打印的可选标题。它将被放置在页面顶部。此属性将接受文本或原始HTML。 |
headerStyle | ‘font-weight: 300;’ | 要应用于标题文本的可选标题样式。 |
maxWidth | 800 | 以像素为单位的最大文档宽度。根据需要更改此选项。打印HTML、图像或JSON时使用。 |
css | null | 这允许我们传递一个或多个css文件URL,这些URL应该应用于正在打印的html。值可以是具有单个URL的字符串,也可以是具有多个URL的数组。 |
style | null | 这允许我们传递一个带有自定义样式的字符串,该字符串应应用于正在打印的html。 |
scanStyles | true | 设置为false时,库将不会处理应用于正在打印的html的样式。使用css参数时很有用。 |
targetStyle | null | 默认情况下,在打印HTML元素时,库仅处理某些样式。此选项允许您传递要处理的样式数组。例如:[‘pading-top’,‘border-bottom’] |
targetStyles | null | 不过,与“targetStyle”相同,它将处理任意范围的样式。例如:[‘border’,‘padding’],将包括“border-bottom”、“bordertop”、“border-left”、“porder-refght”、“padding-top”等。您还可以传递[‘*’]来处理所有样式。 |
ignoreElements | [ ] | 接受打印父html元素时应忽略的html ID数组。 |
properties | null | 打印JSON时使用。这些是对象属性名称。 |
gridHeaderStyle | ‘font-weight: bold;’ | 打印JSON数据时网格头的可选样式。 |
gridStyle | ‘border: 1px solid lightgray; margin-bottom: -1px;’ | 打印JSON数据时网格行的可选样式。 |
repeatTableHeader | true | 打印JSON数据时使用。设置为false时,数据表标题将仅显示在第一页。 |
showModal | null | 启用此选项可在检索或处理大型PDF文件时显示用户反馈。 |
modalMessage | ‘Retrieving Document…’ | showModal设置为true时向用户显示的消息。 |
onLoadingStart | null | 加载PDF时要执行的函数 |
onLoadingEnd | null | 加载PDF后要执行的函数 |
documentTitle | ‘Document’ | 打印html、image或json时,这将显示为文档标题。 |
fallbackPrintable | null | 打印pdf时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开pdf。这允许您传递要打开的不同pdf文档,而不是传递给“可打印”的原始文档。如果在备用pdf文件中注入javascript,这可能会很有用。 |
onPdfOpen | null | 打印pdf时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开pdf。可以在此处传递回调函数,当发生这种情况时将执行回调函数。在某些需要处理打印流、更新用户界面等的情况下,它可能很有用。 |
onPrintDialogClose | null | 浏览器打印对话框关闭后执行的回调函数。 |
onError | error => throw error | 发生错误时要执行的回调函数。 |
base64 | false | 打印作为base64数据传递的PDF文档时使用。 |
honorMarginPadding(弃用) | true | 这用于保留或删除正在打印的元素的填充和边距。有时这些样式设置在屏幕上很好,但在打印时看起来很糟糕。您可以通过将其设置为false来删除它。 |
honorColor(弃用) | false | 要彩色打印文本,请将此属性设置为true。默认情况下,所有文本将以黑色打印。 |
font(弃用) | ‘TimesNewRoman’ | 打印HTML或JSON时使用的字体。 |
font_size(弃用) | ‘12pt’ | 打印HTML或JSON时使用的字体大小。 |
imageStyle(弃用) | ‘width:100%;’ | 打印图像时使用。接受包含要应用于每个图像的自定义样式的字符串。 |

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)