在web端打印是比较常见的需求,实际工作中也接触了不少,在这里对工作中用到的做一下总结
通过style标签内联引入,或者使用媒体查询media="print"外链样式表。然后将无关元素隐藏,只将需要打印的内容展示出来;这时候需要专门写一套打印样式,页面修改,打印样式可能也需要修改,维护成本较高;
<style>
@media print{}
</style>
// 或者
<link rel="stylesheet" media="print" href="print.css”>
需要遍历元素和所有子元素,克隆dom到新的iframe,然后在ifram中发起打印。关键技术点是要把样式完整复制过去;jquery.print.js; react-to-print就是这样实现;
例子
这种方案的好处是适用性强,缺点就是实现难度大;
支持@page 来设置,同时支持 伪类 :left 、:right、:first
打印常用的是A4纸,A4纸尺寸是21cm×29.7cm,在css中可以使用size属性设置
size属性设置页面大小和方向:
例子
@page {
margin: 3.7cm 2.6cm 3.5cm; /* 上下左右边距 */
}
@page :left {
margin-left: 2.5cm;
margin-right: 2.7cm;
}
@page :right {
margin-left: 2.7cm;
margin-right: 2.5cm;
}
@page :first {
size: A4 portrait;
margin-left: 4cm;
margin-right: 4cm;
}
/* 隐藏页眉 */
@page { margin-top: 0; }
/* 隐藏页脚 */
@page { margin-bottom: 0; }
使用pt、mm、cm等绝对单位
打印的时候如果页面很长就会自动分页,如果我们希望分页不要把一些元素分开,可以给元素设置break-inside: avoid;
不过可能会留下空白。
window.print() 、document.execCommand('print’) 、页面右键菜单打印、command+p
在软件项目比较偏向BS架构,也就是使用网页浏览器等工具软件呈现用户交互界面的系统软件。如果在网页中不但能呈现报表或标签,也能直接调用本地或网络共享打印机打印是很多项目都需要的。
网页打印解决方案有很多,比如使用ActivityX控件,JavaScript插件等。网页打印或多或少地都有一些限制,我接下来介绍的这两种方案也是有一些限制,但总体使用起来也能比较好地解决项目需求,这才是根本。
一、使用锐浪报表
使用锐浪报表可以展现复杂的报表、图表、条码标签等,直接可以在网页上或PC客户端上使用,还是很方便的,功能也强大,还可以免费使用。具体锐浪的介绍可以到官网上查看。
以下图示就是在我们微邦软件平台的某进销存项目上使用效果。
可以看到,报表呈现后,上面一排工具栏足够满足项目要求,如打印、导出、页面设置等,使用也很方便,平台已经封装,只要设计好模板,在网页中调用生成即可展现。
锐浪报表这种方式是使用ActivityX控件,对浏览器是有要求,主流国产浏览器还能胜任。不过锐浪有服务器版或HTML5版方式,对浏览器要求较低。
二、使用帆软报表
使用帆软也是很不错的选择,帆软也能做到报表、图表和条码标签的制作和展示,不过帆软是不免费的。
以下图示就是在我们微邦软件平台的某MES项目上使用效果,我们使用帆软工具经过预选设计好的模板,然后在后台生成pdf后发送客户端展示。目前主流浏览器在网页中直接显示pdf也是支持的比较好,如果不支持,也有第三方JavaScript的pdf库可以使用。
结合我们这款开源免费的平台对两个项目案例的整合,我们对功能和报表以最方便快捷的方式完成,缩短项目周期,解决用户实际需要为目标。
ue-Plugin-HiPrint 是一个Vue.js的插件,旨在提供一个简单而强大的打印解决方案。通过 Vue-Plugin-HiPrint,您可以轻松地在Vue.js应用程序中实现高度定制的打印功能。但是本文只简单介绍 Vue-Plugin-HiPrint 在vue3中如何使用固定模板打印的使用方法,以便可以快速集成并使用它。
要开始使用 Vue-Plugin-HiPrint,首先需要安装它。您可以使用 npm 或 yarn 进行安装:
npm install vue-plugin-hiprint --save
# 或
yarn add vue-plugin-hiprint
安装完成后,您需要在您的 Vue 项目中引入 Vue-Plugin-HiPrint。在您的 main.js 或任何其他入口文件中,您可以按以下方式引入它:
1、main.js中引入
import Vue from 'vue';
import VuePluginHiPrint from 'vue-plugin-hiprint';
Vue.use(VuePluginHiPrint);
这会将 Vue-Plugin-HiPrint 注册为 Vue 插件,使其可用于您的整个应用程序。
2、组件中引入
import {hiPrintPlugin } from 'vue-plugin-hiprint'
在开始打印之前,您需要创建打印模板。Vue-Plugin-HiPrint 使用 HiPrint 作为底层打印引擎,它支持使用 HTML 和 CSS 创建高度自定义的打印模板。您可以创建一个包含您想要打印的内容的 HTML 模板,然后使用 CSS 样式进行格式化。
请去demo预览里创建一个适合业务需求的打印模板:
一旦您创建了打印模板,您可以在您的 Vue 组件中使用 Vue-Plugin-HiPrint 来触发打印操作。首先,先要在项目的index.html文件中引入print-lock.css样式文件,这个文件在node_modules/vue-plugin-hiprint/dist/目录下:
<!--【必须】在index.html 文件中添加打印所需样式(此cdn可能不稳定):-->
<link rel="stylesheet" type="text/css" media="print" href="https://cdn.jsdelivr.net/npm/vue-plugin-hiprint@latest/dist/print-lock.css">
<!-- 推荐使用:可以调整成 相对链接/自有链接, 【重要】名称需要一致 【print-lock.css】-->
<link rel="stylesheet" type="text/css" media="print" href="/print-lock.css">
接下来,是在组件中的使用方法:
import {hiPrintPlugin } from 'vue-plugin-hiprint'
hiPrintPlugin.disAutoConnect(); //取消自动打印直接连接客户端
hiprint.init();
在组件中我们需要先取消它的自动连接客户端打印功能,然后初始化vue-plugin-hiprint。
Vue-Plugin-HiPrint 允许您自定义打印样式,以满足您的具体需求。您可以在 预览网站中设计好需要的样式并复制自定义模板的JSON数据,在项目中新建mb.json文件将模板json数据粘贴进去。
import mb from './mb.json'
function orderPrint(){
let printData = {orderId:'单号',title:'模板标题',table:[{NAME:'表格数据'}]};
let hiprintTemplate = new hiprint.PrintTemplate({ template: mb});
// 打印
hiprintTemplate.print(printData);
}
在上面的示例中,我们使用import引入了自定义模板,使用printData自定义了表单具体数据,最后使用print方法完美实现了打印。
Vue-Plugin-HiPrint 提供了一个强大的、易于使用的打印解决方案,适用于 Vue.js 应用程序。通过创建自定义的打印模板和使用 Vue-Plugin-HiPrint,您可以轻松地实现高度定制的打印功能,满足您的项目需求。如果您正在寻找一个方便的 Vue.js 打印解决方案,Vue-Plugin-HiPrint 是一个值得尝试的工具。
原文链接:https://juejin.cn/post/7297080018655412250
*请认真填写需求信息,我们会在24小时内与您取得联系。