1. 程式人生 > >一種基於瀏覽器的自動小票機列印實現方案(js版)

一種基於瀏覽器的自動小票機列印實現方案(js版)

1、使用場景

使用者在瀏覽器做了某項操作後,自動列印小票。

2、測試方式

嘗試了很多辦法,最終都會出現一個彈出框,讓使用者選擇印表機。不符合我們需求。

2.2 lodop

功能比較強大,但是收費的。暫不考慮。

2.3 PAZU

功能也很強大,免費許可。非常贊!

實現過程:

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"
"w3.org/TR/xhtml1/DTD/xh">
<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","4Fang.net/4ff/sc_setup.");
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)

1、使用場景 使用者在瀏覽器做了某項操作後,自動列印小票。 2、測試方式 嘗試了很多辦法,最終都會出現一個彈出框,讓使用者選擇印表機。不符合我們需求。 2.2 lodop 功能比較強大,但是收費的。暫不考慮。 2.3 PAZU 功能也很強大,免費許可。非常

基於OpenCV的三維重建實現方案

摘 要 本文以計算機視覺三維重建技術為研究物件,分析了開放計算機視覺函式庫OpenCV中的三維重建模型,通過六個步驟,特別是攝像機標定和立體匹配中極線約束方法的使用,給出了基於OpenCV的三維重建演算法。該演算法充分發揮了OpenCV的函式庫功能,提高了計算的精度效率,具有良好的跨平臺移植性,可以滿足各

基於智慧卡登入Windows系統的實現方式

  隨著Windows作業系統的發展,Windows作業系統開機登入程式也在不斷改進。在Windows Vista和Windows 7作業系統中,微軟取消了Windows NT/2000中互動式登入支援的GINA(圖形標識與身份驗證)模型,使用了Windows Credential Provider(票據提供

Magnostics Image-based Search of Interesting Matrix Views for Guided Network Exploration(基於網絡信息矩陣圖像的網絡探索方法)

希望 組合 cad 區分 加權 rest 結果 xpl ati 網絡、關系等數據變成如圖的鄰接矩陣時(紅色代表兩個節點也就是人,之間有聯系),但是得到的矩陣會因為順序的問題而出現不同的排列方式,在第一種中會發現因為有聚集的塊狀區域而很容易地把數據分為兩個部分,然後根據數據的

基於python的人臉識別開源系統

無意中 sdn 要求 測試用例 不出 例子 https bin 人臉識別   今天在搜索人臉識別的文章時,無意中搜到一個比較開源代碼,介紹說是這個系統人臉的識別率 是比較高的,可以達到:99.38%。這麽高的識別率,著實把我嚇了一跳。抱著實事求是的態度。個人 就做了一些驗證

基於NTC的控溫電路及軟件實現

推導 極限 div images emp com 兩種 通過 cati NTC(Negative Temperature Coefficient)是一種隨溫度上升時,電阻值呈指數關系減小的熱敏電阻。應用廣泛,最近我們就采用了NTC來控制加熱並測溫,並達到了預期的效果。 1、

基於 Numpy 的 TF-IDF 實現報告

常用 離線 數據結構與算法分析 dex 參考文獻 代碼 運行 數組 步驟 一種基於 Numpy 的 TF-IDF 實現報告 摘要 本文使用了一種 state-of-the-art 的矩陣表示方法來計算每個詞在每篇文章上的 TF-IDF 權重(特征)。本文還將介紹基於 TF-

【書摘】基於Git的版本管理方案

功能 前端 需要 bug evel 熱修復 per person feature 本篇摘錄自《前端工程化體系設計與實踐》一書,筆者認為是一套相對合理的方案,建議團隊可以根據實際情況進行調整並增加協作命名規範。 master分支——主分支 存儲已發布版本的源碼,不能在此

基於STM32的APP和BootLoader設計的方法

IAP(In Application Programming)即在應用程式設計, IAP 是使用者自己的程式在執行過程中對User Flash 的部分割槽域進行燒寫,目的是為了在產品釋出後可以方便地通過預留的通訊口對產品中的韌體程式進行更新升級。 通常實現 IAP 功能時,即使用者程式執

基於凸優化的影象去噪方法演示

本文介紹一種基於凸優化的影象去噪方法。 該方法採用L1範數來衡量影象的平滑度,即能濾除澡聲,又能最大限度地儲存影象的邊緣。 模型如下:   其中f(x)為差分矩陣,存放了X每個元素與其4鄰域的差值。 I為輸入的灰度影象。 對於三通道彩色影象,可

怎麼通過郵箱發超大附件?介紹基於雲服務的方法

合作伙伴第5次催促時,10G的CAD圖紙才傳了67%;又一次,寫好郵件上傳附件時,被通知檔案太大無法上傳;郵件傳送出去的會議資料,永遠不知道誰沒有檢視,還要電話通知一遍…… 工作中,你肯定遇到過上述類似的情況。檔案太大、傳輸緩慢、無法跟蹤檔案狀態,再加上懸在頭頂的deadline,隨便一種情況都足以讓我們焦

基於TLS的高階反除錯技術

盜版行為日益猖獗,嚴重影響到軟體開發者和開發商的智慧財產權及利益,反盜版技術的重要性也越來越引起人們的重視。在反盜版技術中,起最大作用的當屬反除錯技術。然而傳統的反除錯技術都存在一個弱點:他們都在程式真正開始執行之後才採取反除錯手段。實際上在反除錯程式碼被執行前,偵錯程式有大量的時間來影響程式的執行,甚至可以

基於TLS的高級反調試技術

use 工作 main 時間 nal [] ack array 及其 盜版行為日益猖獗,嚴重影響到軟件開發者和開發商的知識產權及利益,反盜版技術的重要性也越來越引起人們的重視。在反盜版技術中,起最大作用的當屬反調試技術。然而傳統的反調試技術都存在一個弱點:他們都在程序真正開

NeuralTalk:基於Python+numpy使用語句描述影象的多模態遞迴神經網路的例程

NeuralTalk工程的流程如下: The pipeline for the project looks as follows: 輸入資料使用Amazon Mechanical Turk收集的影象和5組語句描述的資料集。 The input is a dataset of im

【原始碼】NSGA - II:基於進化演算法的多目標優化函式

NSGA-II是一種著名的多目標優化演算法。 NSGA-II is a very famous multi-objective optimization algorithm. 相應的函式為nsga_2(pop,gen)。 The function is nsga_2(pop,g

Bert-基於深度雙向Transform的語言模型預訓練策略

今天的部落格主要參考了論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。這篇paper是Google公司下幾個研究員發表的,而且在NLP領域引起了很大的轟動(在多個NLP任

如何實現大檔案快速傳輸?分享基於UDP的解決方案

資料正在爆炸式增長,幾乎每兩年翻一番。隨之增加的不僅是資料的數量,還有單體檔案的容量:一張圖片2-3G、一本書稿4-5G、一個視訊片段3-4G、一份設計圖紙十幾G……甚至還有上百G的大檔案。 這些資料和檔案可能是組織機構重要的業務資料,也可能是其重要的資訊資源。它們對於組織機構,尤其是媒體、娛樂、科學計算、

OCTMAP:基於八叉樹的高效概率三維對映框架

摘要 三維模型提供了空間的體積表示,這對於包括飛行機器人和裝有機械手的機器人在內的各種機器人應用非常重要。在本文中,我們提出了一個開源框架來生成體積3D環境模型。我們的對映方法基於八叉樹,使用概率佔用估計。它明確地表示不僅佔用的空間,而且自由和未知的區域。此外,我們提出一種八叉樹地圖壓縮方法,以保持

基於Android Bitmap和陣列操作的簡單卷積影象處理函式

原理來自於知乎文章: https://zhuanlan.zhihu.com/p/43738099+ 我的實現函式: /**使用卷積核對影象進行處理**/ private static float sharpeningEffect[] = new float[]{-1,-

基於二叉樹的int32排序演算法

      之前寫一個庫時用到了字典樹,可以很方便地進行歸類,姓名放進去的時候就會對前部分的字元逐個歸類,從而在全域性深搜的時候得到的字串便是按字母排序過的有序表。        於是我突發奇想——0000、0100、0001