步骤1:全局引入
npm install print-js --save
步骤2:组件内引用
type="primary" @click="print" >打 印
>
import printHtml from 'print-js'
import Print from './components/Print.vue'
步骤3:创建实例方法
components: {
Print,
},
print() {
// 更改页面打印名称
document.title = '******' '.pdf'
printHtml({
printable: 'printMe', // 文档来源:pdf或图像url,html元素ID或json数据对象
type: 'html', // 可打印的类型。可用的打印选项包括:pdf,html,图像,json和raw-html。
// css: 'Print.css', // 这使我们可以传递一个或多个CSS文件URL,这些URL应该应用于要打印的html。值可以是具有单个URL的字符串或具有多个URL的数组。
scanStyles: false, // 设置为false时,库将不处理应用于正在打印的html的样式。使用css参数时很有用。
style: '@media print{@page {size:landscape}}',
showModal: true
})
}
步骤4:创建print 页面 注意:id与print方法内 printable的参数保持一致 ,因为样式类不起作用 只能在元素style属性内写
v-for="unit in printUnit"
:key="unit.code"
style="padding: 10px; background: #fff !important"
>
colspan="8" style=" text-align: center; font-size: 18px; font-weight: bold; font-family: STZhongsong; margin:0;padding:0; " > 战备储备物资调拨通知单({{ printData.allocationTypeName }})
|
||||||||
---|---|---|---|---|---|---|---|---|
单 号:{{ printData.allocationNumber }}
|
colspan="3" rowspan="2" style=" text-align: center; font-size: 14px; font-weight: bold; font-family: KaiTi_GB2312; line-height: 24px; margin:0;padding:0; " > ({{ printData.printSpecialityName?printData.printSpecialityName:printData.reserveSpecialityName }})
|
| ||||||
开单日期:{{ printData.billDate }}
|
||||||||
|
| |||||||
有效期至:{{ printData.expDate }}
|
||||||||
| ||||||||
运输方式:{{ printData.freightModeName }}
|
||||||||
| ||||||||
发物单位:
|
|
发物地址:
|
|
| ||||
联系人: |
|
发 站: | {{ printData.sendingStation }} | |||||
| ||||||||
收物单位:
|
|
收物地址:
|
|
| ||||
联系人:
|
|
到 站: | {{ printData.arrivalStation }} | |||||
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; width: 30px; " > 序号
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 340px; " > 物资名称
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 80px; " > 物资编码
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 120px !important; " > 规格型号
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 50px !important; " > 计量单位
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 50px; " > 储备等级
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 80px !important; " > 数量
|
style=" border: 1px solid black; vertical-align: center; text-align: center; width: 100px; " > 金额 (元)
|
style=" border: 1px solid black; text-align: center; width: 100px; " > 备注
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; " > {{ index + 1 }}
|
>
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; overflow: hidden; white-space: nowrap; " > {{ item && item.businessReserveItemCode }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; white-space: nowrap; maxWidth: 160px !important; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; " > {{ item && item.itemSam }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; overflow: hidden; white-space: nowrap; " > {{ item && item.itemUnit }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; overflow: hidden; white-space: nowrap; " > {{ item && item.reserveGradeName }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: right; overflow: hidden; white-space: nowrap; padding-right: 10px; " > {{ item && item.itemQuantity }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: right; overflow: hidden; white-space: nowrap; padding-right: 10px; " > {{ item && Number(item.itemAmount).toFixed(2) }}
|
style=" height: 38px; border: 1px solid black; vertical-align: center; " > {{ item && item.remk }}
|
colspan="2" style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; " > 本调拨单合计金额(元)
|
colspan="2" style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; font-family: SimSun " > {{ printData.totalAmount | numFormat }}
|
colspan="3" style=" height: 38px; border: 1px solid black; vertical-align: center; text-align: center; " > 本页金额小计(元)
|
colspan="2" style=" height: 20px; border: 1px solid black; vertical-align: center; text-align: center; font-family: SimSun " > {{ printData.itemList .slice(i * pageSize, (i + 1) * pageSize) .map((item) => item.itemAmount) .reduce((pre, next) => pre + next, 0) | numFormat }}
|
style="display: flex; width: 500px;"
>
style="display: flex; justify-content: space-around;width: 450px;"
>
style="
width: 20px;
margin-top: 40vh;
font-size: 9px;
padding-left: 10px;
white-space: pre-wrap;
"
v-html="unit.value"
>
style="font-size: 9px;text-align: center; margin-top: 10px; font-family: SimSun"
>
第{{ i + 1 }}页/共{{ pagenum }}页
import { printingApi } from '@/api/goodsTransfer/createAllocationSheet/detail'
export default class Print extends Vue {
created() {
if (this.$route.query.id) {
this.getData()
}
}
private pageSize = 10;
private pagenum = 0;
private printData: any = [];
private getData() {//获取页面数据
printingApi(this.$route.query.id).then((res: any) => {
this.printData = JSON.parse(JSON.stringify(res.data))
if (this.printData.itemList.length === 0) {
this.pagenum = 1
} else {
this.pagenum = Math.ceil(
this.printData.itemList.length / this.pageSize
)
}
this.printData.itemList.length =
this.printData.itemList.length +
(this.pageSize - (this.printData.itemList.length % this.pageSize))
})
}
}