vue-print-nb插件来实现打印功能——打印布局及尺寸处理

本文介绍了在使用vue-print-nb实现打印功能时遇到的问题,如分页符应用、单元格宽度控制等,并分享了CSS样式调整以改进打印效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写过一篇文章是关于vue-print-nb插件实现打印功能,
vue插件——vue-print-nb 实现打印功能:https://yehaocheng520.blog.csdn.net/article/details/136293441?fromshare=blogdetail&sharetype=blogdetail&sharerId=136293441&sharerefer=PC&sharesource=yehaocheng520&sharefrom=from_link

可以实现的效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

但是在实际使用过程中,打印的效果不尽如人意。下面把打印页面和遇到的问题做一下汇总:

1.html代码——给打印元素绑定printDiv的id

<div id="printDiv" class="boxPrint">
	//下面是遍历的多个数组,从第二个数组开始,就要开始分页,所以给其余元素添加元素前添加分页符
	<div class="listPrint" v-for="(item,index) in listDB" :key="index" :style="index>0?'page-break-before:always;':''">
		<table>
			<tr>
				<td style="width:6mm">序号</td>
				<td style="width:14mm">卡号</td>
				<td style="width:12mm" colspan="2">规格</td>
				<td style="width:10mm">数量</td>
				<td style="width:42mm">加工参数</td>
				<td style="width:12mm">备注</td>
			</tr>
			<tr v-for="(list,listIndex) in item.lists" :key="listIndex">
				<td>序号</td>
				<td>卡号</td>
				<td>规格1</td>
				<td>规格2</td>
				<td>数量</td>
				<td>加工参数</td>
				<td>备注</td>
			</tr>
		</table>
	</div>
</div>

在这里插入图片描述

2.css部分

页面的样式如下:

<style lang="less" scoped>
#printDiv{
	width:90%;
	margin:0 auto;
	padding:0;
	table{
		width:100%;
		border-collapse:collapse;
		border-spacing:0;
		font-size:3.2mm;
		margin:2mm 0;
		table-layout:fixed;//加入了这个属性,才可以设置单元格的宽度,否则设置了也不生效
		td{
			color:#000;
			border:0.5mm solid #000;
			text-align:left;
			padding:2px;
			word-wrap:break-word;
			span{
				//超出2行后隐藏
				text-overflow:-o-ellipsis-lastline;
				overflow:hidden;
				text-overflow:ellipsis;
				display:-webkit-box;
				-webkit-line-clamp:2;
				line-clamp:2;
				-webkit-box-orient:vertical;
			}
		}
	}
	*{
		-webkit-print-color-adjust:exact;
	}
}
</style>

打印的样式如下:

<style lang="less" scoped>
	@media print{
		@page{
			size:auto;
			margin:0;
		}
		#printDiv{
			font-weight:bold !important;
			.listPrint{
				margin-left:-10mm;
			}
			table{
				width:90%;
				font-size:2.4mm !important;
				td{
					span{
						margin-height:6.6mm !important;
					}
				}
			}
			.t{
				font-size:2.6mm !important;
			}
		}
	}
</style>

在这里插入图片描述

### 如何在 Vue3 中使用 `vue3-print-nb` 实现分页打印 #### 安装依赖库 为了能够在 Vue3 项目中集成并使用 `vue3-print-nb` 插件来完成分页打印功能,首先需要安装该插件。 ```bash npm install vue3-print-nb --save ``` #### 配置全局引入 如果希望在整个应用程序范围内都可以调用此插件,则可以在项目的入口文件(通常是 main.js 或 main.ts)里做如下设置: ```javascript import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; // 导入插件 import Print from &#39;vue3-print-nb&#39; const app = createApp(App) app.use(Print) // 注册插件以便全局可用 app.mount(&#39;#app&#39;) ``` 这样做的好处是可以让任何地方都能方便快捷地访问到这个方法而无需重复导入[^1]。 #### 组件内部局部加载 对于只需要在一个特定组件内使用的场景下,可以选择只在这个组件里面按需加载插件。这种方式可以减少不必要的资源消耗,提高性能表现。 ```html <template> <div id="printContent"> <!-- 这里放置要被打印的内容 --> </div> <button @click="handlePrint">点击这里打印</button> </template> <script setup lang="ts"> import { ref, defineComponent } from &#39;vue&#39;; import print from &#39;vue3-print-nb&#39;; function handlePrint() { const elId = &#39;#printContent&#39;; // 要打印区域的选择器 print({ printable: elId, type: &#39;html&#39;, targetStyles: [&#39;*&#39;], style: &#39;.avoid-page-break { page-break-inside: avoid; }&#39;, // 添加样式防止内容跨页显示 }); } </script> <style scoped> /* 设置避免分页符出现在某些元素中间 */ .avoid-page-break { page-break-inside: avoid; } </style> ``` 上述代码展示了如何通过按钮触发事件来进行指定 DOM 结构的打印操作,并且还包含了用于控制页面布局不被打断的关键 CSS 属性 `page-break-inside: avoid` 的应用实例[^3]。 #### 关于图片每张单独成页的情况处理 当涉及到图像类别的特殊需求时——比如想要确保每一个图像是独立的一整页而不是与其他内容共享同一页面——可以通过调整 HTML 和 CSS 来达成目的。下面是一个简单的例子展示怎样做到这一点: ```html <div v-for="(imgUrl, index) in imageUrls" :key="index" class="single-image-page"> <img :src="imgUrl"/> </div> ``` 配合相应的CSS规则使每个 div 只容纳一张图片并且强制其占据整个新起始的新一页: ```css .single-image-page{ break-after: always !important; /* 强制之后跟随一个新的空白页 */ } @media print { img { width: 100%; height: auto; } } ``` 以上就是有关于在 Vue3 应用程序当中利用 `vue3-print-nb` 扩展包实现基本以及高级特性的介绍[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶浩成520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值