一种基于浏览器的自动小票机打印实现方案(js版)


Posted in Javascript onJuly 26, 2016

1、使用场景

用户在浏览器做了某项操作后,自动打印小票。

2、测试方式

2.1 JavaScript实现

尝试了很多办法,最终都会出现一个弹出框,让用户选择打印机。不符合我们需求。

2.2 lodop

功能比较强大,但是收费的。暂不考虑。

2.3 PAZU

功能也很强大,免费许可。非常赞!

详情:http://www.4fang.net/article/tech/pazu_tprinter.html

实现过程:

2.3.1 打印详情页面

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>小票</title>
<style>
body {
margin: 0px;
padding: 0px;
font-size: 11px;
}
hr{width: 100%; border: 1px dashed black;}
/*****************
小票
*****************/
.table .title{
font-size:14px;
}
.table{
width:100%;
}
.table .left{
text-align:right;
}
</style>
</head>
<body>
<table class="table">
<tr>
<td align="center" class="title">ABC学校</td>
</tr>
<tr>
<td align="center">小票</td>
</tr>
<tr>
<td><hr size="1" /></td>
</tr>
</table>
<table class="table">
<caption>
<col style="width:40%">
<col style="width:60%">
</caption>
<tbody>
<tr>
<td class="left">签到时间:</td>
<td class="right">2015年10月19日 15:30</td>
</tr>
<tr>
<td class="left">学员姓名:</td>
<td class="right">周深</td>
</tr>
<tr>
<td class="left">班级:</td>
<td class="right">少儿班</td>
</tr>
<tr>
<td class="left">学校名称:</td>
<td class="right">ABC学院</td>
</tr>
<tr>
<td colspan="2"><hr size="1" /></td>
</tr>
</tbody>
</table>
<table class="table">
<caption>
<col style="width:40%">
<col style="width:60%">
</caption>
<tbody>
<tr>
<td class="left">卡信息:</td>
<td class="right">季卡/60次</td>
</tr>
<tr>
<td class="left">卡余额:</td>
<td class="right">32次</td>
</tr>
<tr>
<td class="left">到期日期:</td>
<td class="right">无限期</td>
</tr>
<tr>
<td class="left">激活日期:</td>
<td class="right">2015-09-08</td>
</tr>
<tr>
<td colspan="2"><hr size="1" /></td>
</tr>
</tbody>
</table>
<table class="table">
<tr>
<td align="center">感谢您的惠顾!<br/>请保管好小票,如有问题,请出示,谢谢!</td>
</tr>
<tr>
<td align="center"><img src="code.png" class="code"/><br/>扫码查详情</td>
</tr>
</table>
</body>
</html>

2.3.2 业务页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="printReceipt.js"></script>
</head>
<body>
<iframe frameborder="0" scrolling="scrolling" src="receipt.html" name="myifrm" id="myifrm" style="height: 0;width: 323px;">
</iframe>
<input class="p__" name="Button1" type="button" value="打印试试!" onclick="print(1);" style="width: 301px"/>
</body>
<script>
initPrintActiveX();
</script>
</html>

2.3.3 js引入

/**
* Created by hery on 2016/7/25.
*/
function initPrintActiveX(){
var div_ = document.createElement('div');
div_.style="display:none";
var object_=document.createElement('object');
object_.setAttribute("classid","clsid:AF33188F-6656-4549-99A6-E394F0CE4EA4");
object_.setAttribute("codebase","http://www.4Fang.net/4ff/sc_setup.exe");
object_.setAttribute("id","pazu");
object_.setAttribute("name","pazu");
var param_=document.createElement('param');
param_.setAttribute("name","License");
param_.setAttribute("value","2AE816BA3A24A9BA3F01162E7BF420F4");
object_.appendChild(param_);
div_.appendChild(object_);
document.getElementsByTagName("body")[0].appendChild(div_);
}
//预先选中的纸张
var strDefaultPaper = 'A4';
//1.载入打印机和纸张列表
function init() {
listPrinters();
//listPapers();
//2.页面载入立即打印
//demo();
}
//列出所有的打印机
function listPrinters() {
var ps = pazu.TPrinter.getPrinters();
//获得是一个以回车换行分隔的字符串
// alert(ps);
var pa = ps.split("\r\n");
for (var i = 0; i < pa.length; i++) {
//alert(pa[i]);
var Op = document.createElement("option");
Op.text = pa[i];
Op.value = pa[i];
try {
printers.add(Op);
} catch (ex) {
alert(ex.message)
}
}
}
function print(num) {
/*跳过IE打印选择提示*/
//默认打印机的名称设置为:GP-58120 Series
var isPromtUser = false;
/*页面设置*/
var sPaper = "A4";
// var sPrinter = printers.value;
var sPrinter = "GP-58120 Series";
pazu.TPrinter.marginTop = 1; //属性 上边距
pazu.TPrinter.marginBottom = 14; //属性 下边距
pazu.TPrinter.marginLeft = 7; //属性 左边距
pazu.TPrinter.marginRight = 8; //属性 右边距
pazu.TPrinter.footer = ""; //属性 页脚
pazu.TPrinter.header = ""; //属性 页眉
pazu.TPrinter.orientation = 1; //属性 整型:纸张方向 1=纵向 2=横向
pazu.TPrinter.paperName = sPaper; //属性 纸张大小名称
pazu.TPrinter.printerName = sPrinter; //属性 打印机名称
pazu.TPrinter.isPrintBackground = false; //属性 是否打印背景 true / false
pazu.TPrinter.isZoomOutToFit = true; //属性 是否缩放以适应大小打印 true / false
//pazu.TPrinter.printTemplate = sPT; //属性 打印模板的URL
pazu.TPrinter.copies = num; //属性 打印份数
//pazu.TPrinter.range = range.value; //属性 页面范围
pazu.TPrinter.isCopyByCopy = false; //属性 是否整份打印结束后再打印下一份 true / false
//pazu.TPrinter.getDefaultPrinter //方法 获得默认打印机的对象
//pazu.TPrinter.printToDefaultPrinter //方法 把要打印的字符串输送到默认打印机(配合getDefaultPrinter 使用)
//pazu.TPrinter.getPaperForms //方法 返回所有纸张格式的列表,以vbCrlf 分割
//pazu.TPrinter.getPrinters //方法 返回一个打印机列表,以vbCrlf 分割
//pazu.TPrinter.createPaper //方法 按指定的宽度和高度创建自定义纸张 请看示例
//pazu.TPrinter.doPrint //方法 执行打印
//pazu.TPrinter.doPrint_ //方法 执行打印但是不进行页面参数设置
//pazu.TPrinter.doPreview //方法 打印预览
//pazu.TPrinter.doPageSetup //方法 执行页面参数的设置
//pazu.TPrinter.showPageSetup //方法 弹出页面设置窗口
//pazu.TPrinter.writeHTMLtoOfficeFile 方法 把HTML导出为Office EXCEL或者 Word格式文件
//要指定打印那个Frame只要用javascript 让那个Frame获得焦点就可以了
//注意:这种方式下是不能预览的,只能立即打印。否则预览看到的是整个网页,而不是指定的frame
window.frames['myifrm'].focus();
//pazu.TPrinter.doPreview();//打印预览
pazu.TPrinter.doPrint(isPromtUser);
}
String.prototype.trim = function () {
return this.replace(/(^\s*)|(\s*$)/g, "");
}
function isNum(n) {
if (isNaN(n))return false;
return true;
}

以上所述是小编给大家介绍的一种基于浏览器的自动小票机打印实现方案(js版),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
Nov 12 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
setTimeout自动触发一个js的方法
Jan 15 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
Oct 22 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
js中的闭包学习心得
Feb 06 Javascript
详解vue 项目白屏解决方案
Oct 31 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 #Javascript
JavaScript从0开始构思表情插件
Jul 26 #Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 #Javascript
第一次接触神奇的Bootstrap基础排版
Jul 26 #Javascript
js获取html的span标签的值方法(超简单)
Jul 26 #Javascript
js无法获取到html标签的属性的解决方法
Jul 26 #Javascript
jquery判断对象是否为空并遍历对象的简单实例
Jul 26 #Javascript
You might like
咖啡的植物学知识
2021/03/03 咖啡文化
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
Django框架模板用法入门教程
2019/11/04 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Numpy 多维数据数组的实现
2020/06/18 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
农民入党思想汇报
2014/01/03 职场文书
单位未婚证明范本
2014/01/18 职场文书
客服部班长工作责任制
2014/02/25 职场文书
节电标语大全
2014/06/23 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
停车场管理协议书范本
2014/10/08 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers