一种基于浏览器的自动小票机打印实现方案(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 相关文章推荐
javawscript 三级菜单的实现原理
Jul 01 Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
jquery each()源代码
Feb 14 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
jquery图片放大镜功能的实例代码
Mar 26 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
Jan 26 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
JavaScript 学习笔记之操作符(续)
Jan 14 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
Angular 应用技巧总结
Sep 14 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
js实现购物车功能
Jun 12 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
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php实现上传图片文件代码
2015/07/19 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python装饰器常见使用方法分析
2019/06/26 Python
Python 的AES加密与解密实现
2019/07/09 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL