基於Metronic的Bootstrap開發框架--資產編碼列印處理

来源:https://www.cnblogs.com/wuhuacong/archive/2019/02/27/10444402.html
-Advertisement-
Play Games

在開發業務管理系統的時候,往往涉及到資產信息及編碼的列印處理,如我們需要對資產信息、條形碼、二維碼一起列印,以便貼在具體資產信息上面,方便微信公眾號、企業微信進行業務處理,那麼編碼的列印就很有必要了,本篇隨筆介紹實際生產環境中的資產編碼列印處理。 ...


在開發業務管理系統的時候,往往涉及到資產信息及編碼的列印處理,如我們需要對資產信息、條形碼、二維碼一起列印,以便貼在具體資產信息上面,方便微信公眾號、企業微信進行業務處理,那麼編碼的列印就很有必要了,本篇隨筆介紹實際生產環境中的資產編碼列印處理。

列印操作,可以使用多種方式處理,如使用PrintThis的JS庫列印,或者使用用戶界面比較好的LODOP插件來進行列印操作,本篇隨筆介紹基於LODOP插件來對資產編碼信息的列印操作;另外列印給的時候,如果不恰當的設置,估計列印信息部分列印,那這種情況也是需要避免的,需要人為的增加分頁的處理,以便整個編碼信息列印正確出來。

1、單個編碼信息的列印

打個記錄我們可以在表格的後面按鈕增加一個處理操作,如下界面所示。

然後觸發一個彈出層進行展示即可,如果用戶需要列印,則在右下角進行列印。

列印界面如下所示。

以上就是幾個操作的界面效果,實際處理代碼是如何的呢,我們如何調用LODOP進行頁面列印的呢?

定義一個彈出層用來展示資產編碼信息,如下所示。

<!--------------------------顯示二維碼的彈出層---------------------------->
<div id="qrcode" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header bg-primary">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
                <h4 class="modal-title">
                    <i class="icon-book-open"></i>
                    <span style="font-weight:bold">查看二維碼信息</span>
                </h4>
            </div>
            <div class="modal-body" id="showCodeDiv">
                <table border='0' style="width:180px" id="qrcodePrint">
                    <tr>
                        <td>
                            <table border='0' style="width:180px;page-break-after:always">
                                <tr>
                                    <td>
                                        <div style="padding-left:5px">資產名稱:<label id="lblName"></label></div>
                                        <div style="padding-left:5px">管理部門:<label id="lblChargeDept"></label></div>
                                        <div style="padding-left:5px">使用部門:<label id="lblCurrDept"></label></div>
                                        <div style="padding-left:5px">使用人:<label id="lblUsePerson"></label></div>
                                        <div style="padding-left:5px">存放地點:<label id="lblKeepAddr"></label></div>
                                        <img alt="" id="img_barcode" />
                                    </td>
                                    <td>
                                        <div id="img_qrcode" style="padding:5px"></div>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>

            </div>
            <div class="modal-footer bg-info">
                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="PrintQrcode()">列印文檔</button>
                <button type="button" class="btn default" data-dismiss="modal">關閉</button>
            </div>
        </div>
    </div>
</div>

這裡的二維碼我使用了qrcodejs插件,條形碼使用JsBarcode插件

引入相關的JS文件就可以使用了

<script src="~/Content/JQueryTools/qrcodejs/qrcode.min.js"></script>
<script src="~/Content/JQueryTools/JsBarcode/dist/JsBarcode.all.min.js"></script>

通過Ajax在後端獲取對象數據,然後綁定信息界面上來,如果是二維碼,條形碼,則根據對應的介面JS代碼進行處理。

        //顯示二維碼
        function ShowCodeByIds(ID) {
            if (ID == "") {
                showTips("請選擇一條記錄");
                return;
            }
            //發送請求
            $.getJSON("/Asset/FindByID?r=" + Math.random() + "&id=" + ID, function (info) {
                $("#lblCode").text(info.Code);
                $("#lblName").text(info.Name);
                $("#lblCurrDept").text(info.CurrDept);
                $("#lblChargeDept").text(info.ChargeDept);
                $("#lblUsePerson").text(info.UsePerson);
                $("#lblKeepAddr").text(info.KeepAddr);

                var code = info.Code;
                $("#img_qrcode").empty();
                var qrcode = new QRCode(document.getElementById("img_qrcode"), {
                    text: code,
                    width: 100,
                    height: 100,
                    colorDark: "#000000",
                    colorLight: "#ffffff",
                    correctLevel: QRCode.CorrectLevel.H
                });
                JsBarcode("#img_barcode", code, {
                    format: "CODE128",
                    displayValue: true,
                    fontSize: 20,
                    lineColor: "#0cc",
                    height: 20,
                    width: 1.5
                });
            });

            $("#qrcode").modal("show");
        }

列印的代碼很簡單,主要就是構建HTML列印數據後,調用對象列印即可,代碼如下所示。

        //列印數據構建
        var LODOP; //聲明為全局變數
        function CreatePrintData(html) {
            LODOP = getLodop();

            LODOP.PRINT_INIT("");
            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(10, 10, 710, "100%", strFormHtml);
            LODOP.PREVIEW();
        }

        //資產編碼的列印
        function PrintQrcode() {
            CreatePrintData($("#qrcodePrint").html());
            LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
            LODOP.PREVIEW();
        }

 

2、批量記錄列印

單個記錄列印沒問題,有時候,需要多個記錄一起列印,這樣可以提高效率。

原本想不提供界面,直接生成HTML進行輸出列印,不過這個方式處理的話,條形碼工作正常但二維碼倒是沒有出來,只好在界面展示後,在通過按鈕進行列印,這樣就可以解決這個問題。

先編寫一個批量列印的彈出層,用在承載界面內容。

<!--------------------------顯示批量列印記錄的彈出層---------------------------->
<div id="codeDiv" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header bg-primary">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
                <h4 class="modal-title">
                    <i class="icon-book-open"></i>
                    <span style="font-weight:bold">查看二維碼信息</span>
                </h4>
            </div>
            <div class="modal-body">
                <div class="row" id="hiddenDiv">
                </div>
            </div>
            <div class="modal-footer bg-info">
                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="AssetPrintOK()">列印文檔</button>
                <button type="button" class="btn default" data-dismiss="modal">關閉</button>
            </div>
        </div>
    </div>
</div>

增加一個按鈕的處理入口代碼。

<button type="button" onclick="AssetPrint()" class="btn btn-circle btn-sm red">
    <i class="fa fa-plus"></i>
    資產編碼列印
</button>

然後編寫一個函數,用來選定記錄,並動態賦值HTML代碼

        function AssetPrint() {
            var rows = $table.bootstrapTable('getSelections');
            if (rows.length == 0) {
                showTips("請選擇你要列印編碼的記錄");
                return;
            }

            var div = $("#hiddenDiv");
            div.empty();
            div.append("<div class='row'>");

            for (var i = 0; i < rows.length; i++) {
                AppendCodeItem(rows[i].Code, rows[i].Name, rows[i].CurrDept, rows[i].ChargeDept, rows[i].UsePerson, rows[i].KeepAddr);
                if (i > 0 && i % 3 == 0) {
                    div.append("<p style='page-break-after:always'>&nbsp;</p>");//分頁列印
                }
            }
            div.append("</div>");

            $("#codeDiv").modal("show");
        }

其中主要的邏輯封裝在AppendCodeItem函數裡面,這個函數就是批量根據數據進行處理的。

        //動態追加HTML內容在對應的層上,並初始化條形碼和二維碼的值
        function AppendCodeItem(Code, Name, CurrDept, ChargeDept, UsePerson, KeepAddr) {
            var div = $("#hiddenDiv");

            div.append("<div class='col-md-6'>");
            div.append("<div class='form-group' style='padding-left:5px'>");
            div.append("<label class='col-md-12'>資產名稱:" + Name + "</label><br/>");
            div.append("<label class='col-md-12'>管理部門:" + CurrDept + "</label><br/>");
            div.append("<label class='col-md-12'>使用部門:" + ChargeDept + "</label><br/>");
            div.append("<label class='col-md-12'>使用人:" + UsePerson + "</label><br/>");
            div.append("<label class='col-md-12'>存放地點:" + KeepAddr + "</label><br/>");
            div.append("</div>");//form-group
            div.append("</div>");//md-6

            //加入一個dom,然後綁定二維碼
            div.append("<div class='col-md-6' style='padding-left;' id='qr_" + Code + "'></div>");

            //加入一個dom,然後綁定條形碼
            div.append("<div class='col-md-12'>")
            div.append("<img id='bar" + Code + "'/>");
            div.append("</div>");

            div.append("<hr/>");

            var barname = "#bar" + Code;
            JsBarcode(barname, Code, {
                format: "CODE128",
                displayValue: true,
                fontSize: 20,
                lineColor: "#0cc",
                height: 20,
                width: 1.5
            });

            var qrname = "qr_" + Code;
            //Jquery.qrcode代碼
            //$("#" + qrname).qrcode({ width: 64, height: 64, text: Code });
            //QRCodejs的語法
            $("#" + qrname).empty();
            var qrcode = new QRCode(document.getElementById(qrname), {
                text: Code,
                width: 80,
                height: 80,
                colorDark: "#000000",
                colorLight: "#ffffff",
                correctLevel: QRCode.CorrectLevel.H
            });
        }

批量彈出層界面如下所示。

列印效果如下所示

 這裡本來想和單個界面設計一樣的,不過佈局好像不知道是受到什麼原因的影響,多個記錄的排布總是不理想,因此只好把條形碼、二維碼挨著放置了。

 

 3、列印的分頁處理

上面的代碼我們做了列印的分頁處理,如果不這樣處理,則會導致一個標簽信息可能不完整,如下效果所示。

 

這樣如果要裁剪標簽的話,這個就會作廢了,需要重新列印,但是我們可以通過分頁列印進行處理這個問題。

分頁列印不複雜,只需要在對應的地方增加一個標記,標註為列印分頁部分即可,如下所示。

<p style='page-break-after:always'>&nbsp;</p>

那麼我們在實際測試,大概幾個標簽就會排滿的時候,增加這個分頁的標記就可以了,如下所示。

for (var i = 0; i < rows.length; i++) {
    AppendCodeItem(rows[i].Code, rows[i].Name, rows[i].CurrDept, rows[i].ChargeDept, rows[i].UsePerson, rows[i].KeepAddr);
    if (i > 0 && i % 3 == 0) {
        div.append("<p style='page-break-after:always'>&nbsp;</p>");//分頁列印
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 管理各種管理器 ///為什麼需要單例 ///單例模式核心在於對於某個單例類,在系統中同時只存在唯一一個實例,並且該實例容易被外界所訪問; ///避免創建過多的對象,意味著在記憶體中,只存在一個實例,減少了記憶體開銷; using System.Collections; using System.Coll ...
  • 在打開from設計界面時,報錯。 解決方法:將項目中Properties文件中licenses.licx刪除,重新建立一個空的licenses.licx文件放到項目中。 重新打開界面,解決 ...
  • 效果展示(尚未完善) using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Threading; using System.Net; using System.Net.S ...
  • 項目中我們常常會碰到一些數據,需要高頻率用到但是又不會頻繁變動的這類,我們就可以使用緩存把這些數據緩存起來(比如說本項目的導航數據,帖子頻道數據). 我們項目中常用到有Asp.Net Core 本身提供的緩存組件MemoryCache以及第三方緩存組件Redis(當然這個不僅僅只用來做緩存工具用). ...
  • 綜合網上資源完成的自己的第一篇博客 網上類似的貼子挺多的,由於情況不太一樣。網上相關帖子都是在 MainWindow 嵌入。我需要在原有客戶端上開發新的插件即用戶控制項庫實現嵌入外部exe。 主要問題:獲取不到視窗句柄。 1、利用系統API實現嵌入。 2、當時在獲取頁面(用戶控制項庫)的句柄問題上碰壁, ...
  • 下載了codesmith 8,連接Mysql卻提示“找不到請求的 .Net Framework Data Provider"。 1,下載MySql.Data.dll:https://dev.mysql.com/downloads/windows/visualstudio/ 下載zip格式的即可,解壓 ...
  • 今天這篇文章我將通過實例代碼帶著大家一步一步通過abp vNext這個asp.net core的快速開發框架來進行Quartz.net定時任務調度的管理界面的開發。大伙最好跟著一起敲一下代碼,當然源碼我會上傳到github上,有興趣的小伙伴可以在文章底部查看源碼鏈接。 作者:依樂祝 原文鏈接:htt ...
  • 在實際業務系統的開發中,往往需要幾個系統協同一起出來同一個資料庫的數據,資料庫可以是同一個資料庫,也可以根據業務拆分的多個資料庫,如我們企業微信的應用、後臺業務管理系統、以及專門為數據提供服務的API服務介面等,這樣可以極大程度上給我們的業務數據提供支撐,並根據不同的特性進行分開管理和維護。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...