vue3+ts简单版打印功能

1、定义一个pdfprint组件

<template>
	<div id="panel" style="height: 0;overflow: hidden;">
		<p>{{info.boxesNum}}</p>
		<p>{{info.code}}</p>
		<p>{{info.postalCode}}</p>
		<p>{{info.orderNo}}</p>
	</div>
</template>

<script lang="ts">
	import {
		defineComponent,
	} from 'vue';
	export default defineComponent({
		name: "pdfPrint",
		props:["info"],
		setup(props, {
			emit
		}) {
			let info = props.info
			const print = () => {
				console.log(info)
				let newPage = window.open();
				const wpt = document.getElementById("panel");
				const newContent = wpt.innerHTML;
				// const oldContent = newPage.document.body.innerHTML;
				newPage.document.body.innerHTML = newContent;
				newPage.document.getElementsByTagName("body")[0].style.zoom = 0.86; //控制打印时的缩放
				newPage.print(); //打印方法
				// // newPage.location.reload();
				// newPage.document.body.innerHTML = oldContent;
			}
			return {
				info,
				print
			}
		}
	})
</script>

<style>
</style>

2、在父组件中引入

<template>
	<a @click="printContent">打印</a>
	<PdfPrint ref="pdfPrint" :info="info"/>
</template>

<script lang="ts">
	import {
		defineComponent,
		reactive
	} from 'vue';
	import PdfPrint from './pdfPrint.vue'
	
	export default defineComponent({
		components: {
			PdfPrint
		},
		setup(props, context) {
			let info = reactive({
				boxesNum: 0,
				code: '',
				postalCode: '',
				orderNo: '',
			})
			
			let pdfPrint = ref()
			function printContent() {
				console.log(pdfPrint.value.print())
			}
			return {
				pdfPrint,
				printContent,
				info,
			};
		}
	})
</script>

<style scoped>
</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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值