基于Metronic的Bootstrap開發(fā)框架經(jīng)驗總結(jié)(14)--條碼和二維碼的生成及打印處理

在很多項目里面,對條形碼和二維碼的生成和打印也是一種很常見的操作,在Web項目里面,我們可以利用JS生成條形碼和二維碼的組件有很多。本文引入兩個比較廣泛使用的JS組件,用來處理條形碼和二維碼的生成處理,并介紹如何利用CLODOP組件實現(xiàn)內(nèi)容的打印輸出。
生成條形碼使用組件JsBarcode,生成二維碼使用組件qrcodejs。

1、條形碼的生成

條碼的作用一般在一些商品標簽上,方便使用條碼槍快速、準確錄入信息。
如下所示是一種條形碼



這里條形碼生成使用了JsBarcode組件進行處理,它支持很多格式的條碼格式,如下所示。



它的簡單代碼例子如下所示。
//HTML代碼
<svg id="barcode"></svg>
<!-- or -->
<canvas id="canvas"></canvas>
<!-- or -->
<img id="barcode"/>

//JS代碼
JsBarcode("#barcode", "Hi!");
// or with jQuery
$("#barcode").JsBarcode("Hi!");

生成的圖片格式如下所示。



JsBarcode組件支持多種選項參數(shù)的設(shè)置,如下所示的代碼

JsBarcode("#barcode", "1234", {
  format: "pharmacode",
  lineColor: "#0aa",
  width:4,
  height:40,
  displayValue: false
});

JsBarcode("#barcode")
  .options({font: "OCR-B"}) // Will affect all barcodes
  .EAN13("1234567890128", {fontSize: 18, textMargin: 0})
  .blank(20) // Create space between the barcodes
  .EAN5("12345", {height: 85, textPosition: "top", fontSize: 16, marginTop: 15})
  .render();

通過該組件的案例代碼介紹,我們可以了解到生成常規(guī)二維碼的使用方式。
例如我們在界面上添加了以下HTML代碼。

<div class="row" id="barDiv1">
    <div class="col-md-4 col-sm-4 col-xs-4">
        條形碼(770 145 896 701):<br />
        <img alt="" id="barcode1" />
    </div>
    <div class="col-md-4 col-sm-4 col-xs-4">
        條形碼(770 145 896 702):<br />
        <img alt="" id="barcode2" />
    </div>
    <div class="col-md-4 col-sm-4 col-xs-4">
        條形碼(770 145 896 703):<br />
        <img alt="" id="barcode3" />
    </div>
</div>

然后通過JS代碼實現(xiàn)二維碼的生成。

//使用JsBarcode生成條形碼
for (var i = 1; i < 10; i++) {
    var barcodeValue = "77014589670" + i;//前綴 + 數(shù)值
    JsBarcode("#barcode" + i, barcodeValue, {
        format: "CODE128",
        displayValue: true, 
        fontSize: 24,
        lineColor: "#0cc"
    });
}

最后我們可以看到具體的生成效果如下所示。



從這里我們可以看到,使用JS實現(xiàn)條形碼的生成是非常方便簡潔的,同事速度也是很不錯的。

2、二維碼的生成

二維碼實現(xiàn)可以通過使用組件qrcodejs進行生成,二維碼也可以使用組件jquery-qrcode進行生成,也相對比較簡潔,不過打印二維碼文檔的時候,jquery-qrcode沒有顯示二維碼圖片,而組件qrcodejs則工作正常,因此推薦使用組件qrcodejs。
這個qrcodejs組件使用方式也很簡單,基礎(chǔ)使用代碼如下所示。

<div id="qrcode"></div>
<script type="text/javascript">
new QRCode(document.getElementById("qrcode"), "http://jindo.dev.naver.com/collie");
</script>

復(fù)雜一點的使用JS代碼如下所示。

<div id="qrcode"></div>

<script type="text/javascript">
var qrcode = new QRCode(document.getElementById("qrcode"), {
    text: "http://jindo.dev.naver.com/collie",
    width: 128,
    height: 128,
    colorDark : "#000000",
    colorLight : "#ffffff",
    correctLevel : QRCode.CorrectLevel.H
});
</script>

通過了解該組件的使用,我們可以在項目中增加一個實際的代碼進行測試,如下所示。

<table border='0' width='100%'>
    <tr>
        <td>
            設(shè)備二維碼(9001):<br />
            <div id="imgDevice9001"></div>
        </td>
        <td>
            設(shè)備二維碼(9002):<br />
            <div id="imgDevice9002"></div>
        </td>
        <td>
            設(shè)備二維碼(9003):<br />
            <div id="imgDevice9003"></div>
        </td>
    </tr>
    <tr style="height:20px"><td colspan="3"></td></tr>
    ......
</table>

具體我們可以利用JS動態(tài)生成相關(guān)的二維碼。

//設(shè)備圖片二維碼
for (var i = 9001; i < 9010; i++) {
    var url = "http://www.iqidi.com/H5/device?devicecode=" + i;

    //使用jquery.qrcode的做法
    //$("#imgDevice" + i).qrcode({ width: 100, height: 100, text: url });
    //$("#imgDevice" + i).css("height", "100px");

    //使用qrcodejs的做法
    var qrcode = new QRCode(document.getElementById("imgDevice" + i), {
        text: url,
        width: 128,
        height: 128,
        colorDark: "#000000",
        colorLight: "#ffffff",
        correctLevel: QRCode.CorrectLevel.H
    });
}

最后界面生成的二維碼如下所示。


3、條形碼和二維碼的打印處理

介紹我二維碼和條形碼的生成,關(guān)于它們的打印,可以利用我介紹過的CLODOP進行打印處理,需要了解可以參考下隨筆《基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(16)--使用云打印控件C-Lodop打印頁面或套打報關(guān)運單信息
我們在這里介紹的打印,也是基于這個控件的打印處理的。
當然,如果打印,也是可以利用PrintThis這個組件進行處理的(詳細可以參考隨筆《基于Metronic的Bootstrap開發(fā)框架經(jīng)驗總結(jié)(9)--實現(xiàn)Web頁面內(nèi)容的打印預(yù)覽和保存操作》),不過總體效果沒有上面的CLODOP的打印效果佳。
打印JS代碼如下所示,可以采用下面兩個函數(shù)的其中之一進行處理。

//使用表格格式化輸出
function PrintBarcodeWithTable() {
    LODOP = getLodop();
    LODOP.PRINT_INIT("條碼_格式化輸出");
    var strHTML = "<table border='0' width='100%' >";
    strHTML = strHTML + "<tr><td>";
    strHTML = strHTML + $("#barDiv1").html();
    strHTML = strHTML + "</td></tr>";
    strHTML = strHTML + "<tr><td>";
    strHTML = strHTML + $("#barDiv2").html();
    strHTML = strHTML + "</td></tr>";
    strHTML = strHTML + "<tr><td>";
    strHTML = strHTML + $("#barDiv3").html();
    strHTML = strHTML + "</td></tr>";
    LODOP.ADD_PRINT_TABLE(88, 200, 700, 900, strHTML);

    LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
    LODOP.PREVIEW();
}

//使用分頁輸出
function PrintBarcodeWithPaging() {
    LODOP = getLodop();
    LODOP.PRINT_INIT("條碼_分頁輸出");
    LODOP.ADD_PRINT_HTM(100, 100, 600, 800, $("#barDiv1").html());
    LODOP.NewPage();
    LODOP.ADD_PRINT_HTM(100, 100, 600, 800, $("#barDiv2").html());
    LODOP.NewPage();
    LODOP.ADD_PRINT_HTM(100, 100, 600, 800, $("#barDiv3").html());
    LODOP.NewPage();

    LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
    LODOP.PREVIEW();
}

條碼的打印效果如下所示。

而打印二維碼的JS代碼如下所示。

//打印二維碼
function PrintQrcode2() {
    CreatePrintData($("#qrcode").html());
    LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
    LODOP.PREVIEW();
}

//打印數(shù)據(jù)構(gòu)建
function CreatePrintData(html) {
    LODOP = getLodop();

    LODOP.PRINT_INIT("");
    //var strBodyStyle = "<link type='text/css' rel='stylesheet' href='/Content/Themes/Default/style.css' />";
    var strBodyStyle = "<style><!--table { border:1;background-color: #CBCBCC } td {background-color:#FFFFFE;border: 1; }";
    strBodyStyle += " th { background-color:#F1F1F3;padding-left:5px;border:1}--></style>";
    var strFormHtml = strBodyStyle + "<body>" + html + "</body>";
    LODOP.ADD_PRINT_HTM(20, 40, 710, 900, strFormHtml);
    LODOP.PREVIEW();
}

得到的二維碼打印效果如下所示。



最終完成了這個關(guān)于條形碼、二維碼的動態(tài)生成,以及圖形打印的相關(guān)操作了。整個模塊的界面如下所示。



關(guān)于條形碼、二維碼的處理,我們這里引入的條形碼組件JsBarcode和二維碼組件qrcodejs是非常不錯的開源JS組件,滿足了我們大多數(shù)的要求,而且使用方便、簡潔,希望這些內(nèi)容能夠給你的項目提供靈感及用處。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內(nèi)容