目录 使用print-js 打印渲染不出来 vue中printjs使用指南 使用攻略 参数 使用print-js 打印渲染不出来 vue 使用print-js 打印渲染不出来, 实际数据已经加载出来了。 遇到这问题,解决方向 1、
目录
- 使用print-js 打印渲染不出来
- vue中printjs使用指南
- 使用攻略
- 参数
使用print-js 打印渲染不出来
vue 使用print-js 打印渲染不出来, 实际数据已经加载出来了。
遇到这问题,解决方向
1、是否是数据未赋值上
2、打印加载js是否渲染上
所以:在vue中可以使用id的形式和ref的形式进行绑定,如果id绑定渲染不成功的话可以尝试
<div id="printDiv" ref="printDiv"/>
this.$refs.printDiv
print({
printable: this.$refs.printDiv,
type: 'html',
scanStyles: false
})
vue中printjs使用指南
使用攻略
参考文档:https://printjs.crabbly.com/
分页:使用css的 page-break-after:always 来控制在某个DIV之后新开一个页面
<div style="page-break-after:always">我是封面</div> <div style="page-break-after:always">我是目录,你不知道我的内容有多长</div> <div>我是正文,我需要从一个新页面开始展示</div>
标题栏每页重复打印:因为打印时,表格中的thead和tfoot默认会在每一页重复打印,所以只要设置好表格结构就行。
html打印
<div id="printJS-table">
<table class="printTable" style="width: 100%; text-align: center" border="0">
<thead>
<tr class="maintitle">
<td :colspan="columns.length">
<span style="font-size: 20px">{{ modelRef.hospitalName }} 标本阳性率报表</span>
</td>
</tr>
<tr class="subtitle">
<td :colspan="2">
统计时间:{{ modelRef.inlineForm.timeSpan[0].format('YYYY/MM/DD') }}-{{
modelRef.inlineForm.timeSpan[1].format('YYYY/MM/DD')
}}
</td>
<td :colspan="columns.length - 4">制表人:{{ modelRef.username }}</td>
<td :colspan="2">打印时间:{{ moment().format('YYYY/MM/DD') }}</td>
</tr>
<tr class="header">
<th v-for="item in columns" width="">{{ item.title }}</th>
</tr>
</thead>
<tbody>
<tr
v-for="(row, index) in printDatalist"
:class="{ strongRow: row.sampletype == '合计' }"
>
<td
:class="{ lastRow: printDatalist.length == index + 1 }"
v-for="column in columns"
>
{{ row[column.dataIndex] }}
</td>
</tr>
</tbody>
</table>
</div>
const handlePrint1 = () => {
printJS({
printable: 'printJS-table',
type: 'html',
// targetStyles: ['*'],
// headerStyle: 'font-size:20px',
style: `
@page {
margin: 0.5cm; margin-right: 0.5cm; margin-top: 0.5cm; margin-bottom: 0.3cm; padding-bottom: 0px;}
.printTable thead .maintitle {
text-align: center;
font-size: 20px;
}
.printTable thead .subtitle {
text-align: center;
font-size: 13px;
}
.printTable thead .header th {
border-top: 1px solid #000;
border-right: 1px solid #000;
}
.printTable thead .header th:nth-child(1) {
border-left: 1px solid #000;
}
tbody td {
border: 1px solid #000;
}
.printTable tbody .strongRow {
font-weight: bold;
}
tbody {
text-align: center;
}
table {
border-collapse: collapse;
}
`,
});
};
以json格式打印
const handlePrint = () => {
let printColumns = columns.value.map((ele: any) => {
return {
field: ele.dataIndex,
displayName: ele.title,
};
});
printJS({
printable: dataSource.value,
maxWidth: 2500,
properties: printColumns,
header: `
<div class="titleDiv">
<div class="title">${modelRef.hospitalName} 标本阳性率报表</div>
<div class="subtitle">
<div class="label">
统计时间:${modelRef.inlineForm.timeSpan[0].format(
'YYYY/MM/DD',
)}-${modelRef.inlineForm.timeSpan[1].format('YYYY/MM/DD')}
</div>
<div class="label">制表人:${modelRef.username}</div>
<div class="label">打印时间:${moment().format('YYYY/MM/DD')} </div>
</div>
</div>
`,
//size: landscape;
style: `@page { margin: 0.5cm; margin-right: 0.5cm; margin-top: 0.5cm; margin-bottom: 0.3cm; padding-bottom: 0px; }
.title {
margin-top: 10px;
font-size: 20px;
text-align: center;
padding:10px;
}
.subtitle {
display: flex;
justify-content: space-between;
font-size: 16px;
padding:10px;
}
.subtitle .label {
flex: 1;
font-size: 14px;
}
.subtitle .label:nth-child(2) {
text-align: center;
}
.subtitle .label:nth-child(3) {
text-align: right;
}
`,
gridStyle: 'text-align: center; border: 1px solid black;',
gridHeaderStyle:
'border-top: 1px solid black; border-right: 1px solid black; border-left: 1px solid black; border-bottom: 0px;',
type: 'json',
});
};
参数
以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。
