web打印技术方案

在B/S应用系统开发中常常遇到表单打印需求,尤其是OA、ERP类的企业运营管理系统,打印的需求很常见,但WEB应用的打印一直以来是一个难题,特别是在应用中完成标签打印(如包裹面单、货运标签等)、票据打印(如零售小票)难度较大,其难度在于如何将需要打印的内容,精确套打到标签、票据中,精确控制分页,并实现高速连续打印。

对于WEB打印的技术实现方案以及项目实践效果进行分别介绍,希望对大家有所帮助。

1、web打印技术方案

Web打印技术的实现方案有多种,以下是其中四种常见的方案:

一、使用浏览器的打印功能菜单或windows.print()打印。这是最简单的方案,不需要对浏览器进行任何扩充。但是,这种方案存在很多问题,包括:

(1)不能准确对齐边边距及打印文字,常常会发现打印的样式十分混乱,因为打印机采用的是 mm 单位,而不是我们页面常用的 px,同时有些样式在打印时也不会生效;

(2)会有页脚页眉干扰;

(3)不能精确分页。浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。

(4)不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。

二、使用@media print媒体查询控制打印样式因为打印机采用的是 mm 单位,而不是我们页面常用的 px,所以一般我们都需要为打印样式重新进行设计这种方法是直接使用浏览器打印功能的增强版本。该方案通过在html文档中,嵌入打印相关的css样式,在CSS中,我们可以使用@media print规则来设置不同媒体类型下的样式来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。使用该方案的优点是,成本小,不需要下载任何插件,而且跨平台性非常好。

基于此类技术实现的开源组件有:hiprint、vue-plugin-hiprint、vue-print-nb、vue3-print-nb、printThis等。

这种方式实现打印也有短板:

(1)对页面开发要求比较细节和繁琐,需要在控制打印的地方使用好@media print的css样式,在不同类型的浏览器下可能会打印的效果不一样。

(2)跟使用pdf和office的打印功能相比,打印精准度上还是有一定差距,不过对于大部分业务来说也够用。

. 使用浏览器插件实现打印在浏览器中安装ActiveX控件实现打印。该方案在IE时代非常流行。这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好。但缺点也是很明显的,就是ActiveX控件的只能在IE浏览器下使用,在当前Firefox, Chrome, Edge成为主流的情况下,其适用范围大大减少。另外,ActiveX控件需要在每个客户端安装维护,经常出现客户端莫名的问题,跟操作系统和浏览器版本都有关系,运维成本也比较高。

. 转化成PDF文档实现打印由于PDF是一种版式文件格式,一旦生成以后在任何地方阅读打印效果都是一样的。基于转化PDF实现打印有前端转化和后端转化两种方案。

(1)前端转化PDF实现打印。jsPDF 是一个开源组件,基于 HTML5 的客户端解决方案,使用浏览器纯前端技术用于生成各种用途的 PDF 文档,这样就可以把图片或网页转化为PDF文件,然后打印PDF文件,进而实现打印需求。

(2)后端转化PDF实现打印。通过后端的文档转化组件,把页面内容转化为PDF文档,下载到前端进行打印。专业的打印产品往往会配有打印设计器,实现精准的打印排版设计,然后转化成PDF进行输出打印。开源的组件有wkhtmltoPdfitext等。这种方案的缺点是开发打印设计器的成本较高,整体技术复杂都较大。

2、项目实践web打印方案

云程低代码平台采用了第二种打印方案,并集成整合了vue-plugin-hiprint打印组件,实现了可视化设计打印模板,支持各种常见类型的打印需求。

vue-plugin-hiprint提供了Web打印设计器功能,它是一种在线打印模板设计工具,具有直观的用户界面,使非专业开发人员也能轻松创建高质量的打印模板,广泛用于各种应用场景,如发票打印、标签打印、报告生成等。以下是Web打印设计器的一些关键特点:

(1)模板创建:Web打印设计器通常提供一系列预设的模板,用户可以直接使用或基于这些模板进行修改。用户还可以从头开始创建新的打印模板。

(2)组件和元素:Web打印设计器允许用户添加各种组件和元素,如文本框、图像、表格、条形码等。这些组件和元素可以方便地调整大小、位置和样式。

(3)数据绑定:Web打印设计器支持数据绑定,这意味着用户可以将数据源(如数据库、API等)与模板中的特定组件关联。这样,当数据发生变化时,打印输出也会相应更新。

(4)预览和测试:Web打印设计器通常提供预览功能,允许用户在正式打印之前查看设计的效果。这有助于确保设计满足要求,并进行必要的调整。

打印模板管理:

打印模板在线设计:

发票类定位精准打印:

在线体验:http://www.yunchengxc.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试 - 区间交集 - 深度优先搜索dfs算法(滥用)(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述备注用例1、输入2、输出3、说明 四、解题思路1、核心思路:2、具体步骤 五、Java算法源码再重新读一遍题目,看看能否优化一下~解题步骤也简化了很多。 六、效果展示1、输入2、输出3、说明 华为OD机试 2…

用最通俗的语言讲解 TCP “三次握手,四次挥手”

目录 一. 前言 二. TCP 报文的头部结构 三. 三次握手 3.1. 三次握手过程 3.2. 为什么要三次握手 四. 四次挥手 4.1. 四次挥手过程 4.2. 为什么要四次挥手 五. 大白话说 5.1. 大白话说三次握手 5.2. 大白话说四次挥手 六. 总结 一. 前言 TCP 是一种面向连接的、可靠…

【SpringBoot快速入门】(3)SpringBoot整合junit和MyBatis 详细代码示例与讲解

目录 1.SpringBoot整合junit1.1 环境准备1.2 编写测试类 2.SpringBoot整合mybatis2.1 回顾Spring整合Mybatis2.2 SpringBoot整合mybatis2.2.1 创建模块2.2.2 定义实体类2.2.3 定义dao接口2.2.4 定义测试类2.2.5 编写配置2.2.6 测试2.2.7 使用Druid数据源 之前我们已经学习的Spr…

I.MX6ULL_Linux_驱动篇(47)linux RTC驱动

RTC 也就是实时时钟,用于记录当前系统时间,对于 Linux 系统而言时间是非常重要的,就和我们使用 Windows 电脑或手机查看时间一样,我们在使用 Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写 Linux 下的 RTC 驱动程…

spring boot回顾02

配置文件 SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的 application.properties 语法结构 :keyvalue application.yml 语法结构 :key:空格 value 配置文件的作用 :修改SpringBoot自动配置的默认值&am…

低功耗 电源管理 SCMI接口

SCMI overview: SCMI 协议:

本地websocket服务端结合cpolar内网穿透实现公网访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

VMware克隆虚拟机

要求:利用模板虚拟机hadoop100,克隆出hadoop101虚拟机。 1、鼠标右键点击已存在的模板虚拟机hadoop100 --> 管理 --> 克隆 2、选择克隆自虚拟机中的当前状态 3、创建完整克隆 4、修改虚拟机名称、位置 5、等待克隆完成后,则成功克隆出…

Debian在升级过程中报错

当我们在升级的过程中出现如下报错信息 报错信息如下所示: The following signatures couldnt be verified because the public key is not available: NO_PUBKEY ED444FF07D8D0BF6 W: GPG error: http://mirrors.jevincanders.net/kali kali-rolling InRelease: …

CentOS安装jdk

1、查看可安装版本 yum -y list java* 2、安装jdk1.8版本 yum -y install java-1.8.0-openjdk 3、查看版本 java -version 4、安装目录为: /usr/lib/jvm 5、卸载 yum -y remove java-1.8.0-openjdk

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案 一、洗衣洗鞋店小程序功能 1. 预约订单:忙碌时,您可以使用预约功能轻松获取洗衣服务。 2. 在线下单:用户可直接通过小程序在线下单,享受专人上门取货与配送服务。…

Windows下Navicat15.0连接Oracle11g报ORA-28547解决

目录 背景 一、相关环境 1、操作系统 2、Navicat版本 3、ORACLE连接 4、默认连接 二、问题分析 1、默认dll配置 三、修改配置 1、下载匹配的client 2、替换相应目录 总结 背景 最近在项目中需要使用Oracle数据库,当前很多应用系统的数据都存储在MySQL或者Pos…

JRT整合下载文件api

以前最古老的是用的FTP存文件,所以原始的文件操作是直接操作FTP,后面随着使用发现FTP对端口要求太多了,容易出问题,新的安保方面也提安全方面问题,就转http文件服务了。为了同时兼容两种文件服务,此时就抽取…

用户管理第2节课-idea 2023.2 后端一删除表,从零开始---【本人】

一、清空model文件夹下,所有文件 1.1.1效果如下: 1.1代码内容 package com.daisy.usercenter.model;import lombok.Data;Data public class User {private Long id;private String name;private Integer age;private String email; }二、清空mapper文件…

文档理解的新时代:LayOutLM模型的全方位解读

一、引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显。特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战。文档不仅包含文本信息,还包括布局、图…

使用 Docker 部署企业培训系统 PlayEdu

1)PlayEdu 介绍 官网:https://www.playedu.xyz/ GitHub:https://github.com/PlayEdu/PlayEdu PlayEdu 是一款适用于搭建内部培训平台的开源系统,旨在为企业/机构打造自己品牌的内部培训平台。PlayEdu 基于 Java MySQL 开发&…

ctfshow sql 195-200

195 堆叠注入 十六进制 if(preg_match(/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|\|\"|select|union|or|and|\x26|\x7c|file|into/i, $username)){$ret[msg]用户名非法;die(json_encode($ret));}可以看到没被过滤,select 空格 被过滤了,可…

KylinV10 安装 MySQL 教程(可防踩雷)

KylinV10 安装 MySQL 教程(可防踩雷) 1、直接用 apt 快捷安装 MySQL $ sudo apt-get update #更新软件源 $ sudo apt-get install mysql-server #安装mysql然后你会发现,KylinV10 安装畅通无阻,并没有设置密码的场景&#xff0c…

SQLiteStudio安装指南

本博文源于笔者想要打开sqlite3的db文件,于是下载了SQLiteStudio,下载了它,sqlite3的文件随便查看,这里从零开始安装 文章目录 1、搜索官网网址2、开始下载3、开始安装4、开始使用5、总结 1、搜索官网网址 官网地址:…

【Vue中给输入框加入js验证_blur失去焦点进行校验】

【Vue中给输入框加入js验证_blur失去焦点进行校验】 通俗一点就是给输入框加个光标离开当前文本输入框时&#xff0c;然后对当前文本框内容进行校验判断 具体如下&#xff1a; 1.先给文本框加属性 blur“validatePhoneNumber” <el-input v-model“entity.telephone” blur…