实现WEB打印的几种方法

article/2025/9/14 4:11:07

当前WEB应用开发非常流行,主要原因是WEB应用客户端的规则很简单,容易学习,容易维护,容易发布,降低了开发难度。但是,WEB应用的打印一直以来却是一个难题,特别是在应用中完成标签打印(如包裹面单、货运标签等)、票据打印(如零售小票)难度较大,其难度在于如何将需要打印的内容,精确套打到标签、票据中,精确控制分页,并实现高速连续打印。

对于WEB打印,当前有几种常见的方法,下面分别介绍,希望对大家有所帮助。

一、直接使用浏览器的打印功能

使用打印菜单或windows.print()的即可。这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:

  1. 不能精确分页。浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。
  2. 会有页脚页眉干扰。
  3. 不能准确对齐边边距及打印文字。
  4. 不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。
  5. 打印时一般会出现弹窗提示,影响用户体验。

二、使用print css

这种方法是直接使用浏览器打印功能的增强版本。该方案通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。使用该方案的优点是,成本小,不需要下载任何插件,而且跨平台性非常好。但是目前的问题是:

  1. print css 厂商的支持度较差。
  2. 没有解决打印时会出现弹窗提示的问题,连续打印是效率较差。用户体验较差
  3. 打印小幅面的标签时不太适合
  4. 打印一维码,二维码不太方便
  5. 必须使用windows的驱动程序,对于斑马等公司提供的采用ZPL协议的专业标签打印机,支持不太好。

三、使用PDF文件

用这种方式,就是从服务器端下载一个pdf文件流,在浏览器中用adobe插件打开,然后用adobe的打印菜单进行打印。该方案能实现精确套打,但需要下载adobe插件。同时,该方案一般更适合报表的打印,打印标签/票据并不十分合适。   

四、采用ActiveX

该方案在IE时代非常流行。这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好。但缺点也是很明显的,就是ActiveX控件的只能在IE浏览器下使用,在当前Firefox, Chrome, Edge成为主流的情况下,其适用范围大大减少。

五、打印精灵采用的技术方案

打印精灵设计目标支持网页打印、移动设备打印、嵌入式设备打印,满足多种场景下的打印需求,为软件开发者、系统集成商降低开发难度加快产品研发速度提供一个工具,设计打印精灵时,我们提出了如下目标:

  1. 提供简单的JS API,通过API直接控制打印机。
  2. 支持IE9+、Firefox、Chrome、Safari等主流浏览器,支持手机浏览器
  3. 专注标签打印,打印小票、商标、吊牌、物流面单,支持一维码,二维码打印。
  4. 超高速打印支持专业标签打印机,无须Windows打印驱动,直接使用业界标准的ZPL/CPCL打印指令,确保全速打印
  5. 提供WYSWYG所见即所得的模板编辑器,分离模板设计和模板打印,方便标签设计。
  6. 同时支持WEB打印,移动设备打印,嵌入式设备打印。

根据上述目标,我们提出了打印精灵的技术实现方案,方案以打印模板为核心,分别实现WEB打印,移动设备打印,嵌入式设备打印的驱动。本文重点介绍,WEB驱动的实现技术,移动设备/嵌入式设备的处理方案,我们将在其他文章里陆续介绍。

前面介绍的常规WEB打印技术,各有各的问题,无法实现上述目标。比如:要实现跨浏览器支持就不能使用ActiveX技术; 同时支持WEB打印、移动设备打印、嵌入式设备打印就不能采用print css技术等等。通过反复研究、比较、权衡,我们设计了本地打印代理的模式。

本地打印代理本质上是一个在本地启动miniWeb服务器,通过客户浏览器与miniWeb服务器的通讯,完成打印。由于miniWeb服务器在独立的进程中运行,可以开发各种复杂的功能,而不会影响浏览器,是一个非常稳定的、可靠、可兼容各种浏览器的方案。该方案的难点是设计合理的通讯协议,解决跨域访问等技术问题。

实现上,我们采用了跨平台的golang作为开发语言,开发了一个可以开机自启动的miniWebSvr程序,可以在windwos, linux等系统上使用。golang的性能较高,最终程序的体积较小,运行速度快。需要的同学可以到这里下载。

为了简化打印操作,我们对底层协议进行了封装,提供了便于操作的API的。详见JS API使用指南


http://chatgpt.dhexx.cn/article/7R6Yx5D4.shtml

相关文章

web打印三种实现方式

web打印的方式可分为三种: 直接调用浏览器打印通过javascript插件调用浏览器打印通过第三方程序直接调用打印机 一、直接调用浏览器打印 通过在javascript代码中调用window.print()函数实现,浏览器会自动获取当前页面内容,并打开浏览器的打…

html纵向广告滚动条,网页右侧的漂浮广告代码,随滚动条滚动

HTML代码(即需要漂浮的广告): js代码:前提是必须要引入jquery文件 $(function(){ $(window).scroll(function(){ var scrollTop document.body.scrollTop || document.documentElement.scrollTop || 0; $(".christmas_ad").stop(); var scrol…

php浮动广告,JavaScript实现漂浮广告代码的实例总结

我们在打开网页的时候,我们会发现不管是什么网页都会有很多漂浮的广告,有很多人都会在想,这样的效果是怎么实现的呢?今天我们就带大家详细介绍下JavaScript实现漂浮广告代码的实例总结! 第一种 漂浮广告 不符合W3C Jav…

html左侧浮动广告代码,如何制作浮动广告 JavaScript制作浮动广告代码

如果有一定的JavaScript基础,制作浮动广告还是比较容易的。直接上代码了:无标题文档 *{ margin:0; padding:0; } #csdn { width:800px; margin:0 auto; } #ad { position:absolute; right:0px; top:30px; z-index:1; } #cl { position:absolute; right:0…

php 漂浮广告代码,JavaScript实现带缓冲效果的随屏滚动漂浮广告代码

本文实例讲述了JavaScript实现带缓冲效果的随屏滚动漂浮广告代码。分享给大家供大家参考,具体如下: 这里演示了始终随屏滚动的JavaScript代码,在国内的应用泛滥成灾了,特别是一些喜欢漂浮广告的站长,常把本代码用作了漂…

html左侧浮动广告代码,纯js网页浮动广告代码

网上一般的网页浮动广告代码都是基于jquery的,受jiquery版本及浏览器限制,非常容易出现不兼容的情况,本站分享一段纯js网页浮动广告代码,简单兼容。 html代码: javascript代码: window.οnlοadfunction(){…

HTML将广告关闭的JS代码,带关闭漂浮广告代码_漂浮广告js代码_漂浮窗口模式关闭...

带关闭漂浮广告代码带关闭漂浮广告代码带关闭按钮地网页漂浮广告代码 x ff.js代码 var xpos = 20; var ypos = document.body.clientheight; var step = 1; var delay = 30; var height = 0; var hoffset = 0; var woffset = 0; var yon = 0; var xon = 0; var pause = true; v…

漂浮广告代码

<!doctype html> <html> <head> <meta charset"utf-8"> <title>漂浮广告代码</title> <script src"http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> </head> <body> &…

php漂浮广告代码,JS随机漂浮广告代码具体实例

复制代码 代码如下: var xPos0,yPos0;//x,y轴坐标 var xon0;//图片在x轴移动方向 var yon0;//图片在y轴移动方向 var step1; //移动距离 var imgdocument.getElementByIdx_x("float");//图片层 function floatP() { var widthdocument.body.clientWidth;//浏览器…

JS实现漂浮广告功能

JS实现漂浮广告功能 前言一、漂浮广告案例 前言 漂浮广告非常简单也是老案例了&#xff0c;在网页的设计中可直接拿去用&#xff0c;原理都是我之前文章所讲到的&#xff0c;如果有什么不明白的可以看看我之前的文章&#xff0c;仅供参考学习。 一、漂浮广告案例 我在这个案例…

C语言课后习题(1)

谭浩强C语言第五版的一些课后习题 常用头文件&#xff1a; #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<stdbool.h> 注意事项&#xff1a; 1)获取输入的字符串时&#xff0c;gets保留空格 scanf遇到空格…

C语言课后习题(计算增长率比值

#include <stdio.h>int main() {double p,r;int n;p1.00;r0.07;for(n1;n<10;n){pp*(1r);}printf("%lf\n",p);return 0; } 假如我国国民生产总值的年增长率为7%&#xff0c; 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式,r为年增长率&…

c语言字符串作业题,C语言课后习题练习(四)

(ps:提前声明一下&#xff1a;课后习题是备份给自己看的&#x1f602;) 1.输入3个整数&#xff0c;按由小到大的顺序输出 int main() { void swap(int *p1, int * p2); int n1, n2, n3; int *p1, *p2, *p3; printf("input three integer n1,n2,n3:"); scanf("%d…

翁恺C语言课后习题

1 时间换算&#xff08;5分&#xff09; 题目内容&#xff1a; UTC是世界协调时&#xff0c;BJT是北京时间&#xff0c;UTC时间相当于BJT减去8。现在&#xff0c;你的程序要读入一个整数&#xff0c;表示BJT的时和分。整数的个位和十位表示分&#xff0c;百位和千位表示小时…

啊哈C语言课后练习题

第 四 章 第四节 项目一&#xff1a;求1~100所有偶数的和。 问题代码/*copyright (啊哈C语言), 学习C *All rights reserved. *文件名称:myfirstc. *作者&#xff1a;JohnLu *完成日期&#xff1a;2020年3月17日 *版本号V1.0 * *问题描述&#xff1a;求1~100所有偶数的和。 …

12道c语言的课后习题!

1、计算n的阶乘&#xff08;1*2*3*4*5 n是个数&#xff0c;比如说乘到100&#xff1f;&#xff09; // 计算n的阶乘#include"stdio.h"int main() {int n 0;scanf("%d", &n);int i 0;int ret 1;for (i 1; i < n; i) {ret * i;}printf("…

TeeChart在VS2005,VS2008的入门教程

最近项目上要用到TeeChart来绘图&#xff0c;网络上关于TeeChart的资料很多&#xff0c;但是感觉很多都讲不到点上&#xff0c;很多入门过程中碰到的细节问题还是要自己探索。我把这两天的学到的记下来&#xff0c;也与大家分享。 环境&#xff1a;VS2005,VS2008 TeeChart版本:…

怎么用VS2008?

请问各位怎么用VS2008&#xff0c;为什么总是出错&#xff1f;我是这么做的。

[Win8]如何使用Visual Studio2012进行Windows8项目开发

随着Windows8普通版&#xff0c;专业版和企业版的普及&#xff0c;Windows8的应用开发也逐渐火热起来。 下面简单介绍一下如何使用Visual Studio2012进行Windows8项目的开发。 首先安装Windows8的操作系统&#xff0c;推荐安装32位的Win8&#xff0c;因为64位的容易出现不兼容…

VS2008技巧收集

1&#xff0c;Visual Studio 2008自带的1000多个 Windows 系统使用的各种图标、光标和动画文件在Visual Studio 2008的安装目录下&#xff0c;/Microsoft Visual Studio 9.0/Common7/VS2008ImageLibrary/2052文件夹下面&#xff0c;有一个VS2008ImageLibrary.zip&#xff0c;这…