zoukankan      html  css  js  c++  java
  • c# asp.net mvc使用斑马GK888t打印机打印标签

    前言

    c#语言,asp.net mvc,南京都昌电子病历模板工具(类似word),斑马GK888t,打印手腕带和标签纸。

    实现步骤为:在页面上显示一个或多个都昌模板工具,点击页面上的button,出现都昌控件的预览界面,然后在预览界面上点击打印,打印到手腕带纸或者标签纸上。

    简述

    安装打印机驱动(不是很理解,如有错误,欢迎大家赐教)

    • 从网上下载了GK888t的打印机驱动,并完成安装。(或者不需要安装,有电的打印机通过usb连上电脑后,电脑会自动识别安装)
    • 在控制面板硬件和声音设备和打印机,右键选择添加打印机,端口就直接默认吧(不知道为什么,但就是这样做了),选择的打印机驱动必须是ZDesiger Gk888t。添加完成后,设置为默认打印机
      image

    打印设置的注意事项

    • 首先明确,打印首选项的大小设置打印内容的大小设置要与实物纸张大小一致
    • 设置打印首选项,大小设置成实际的纸张大小,单位是看标签格式中选了哪一项
      image

    像手腕带这样,纸张上只有部分是打印区域,首选项中设置的大小还是设置成整条纸的大小,不需要打印的纸对应打印内容的空白区域。

    • 在高级设置中,对于GK888t这个打印机,不管打印是否使用了碳带,标签纸张类型都选 热敏(用碳带打印,曾勾选了热转印,但是只能打一次,这次打完后打印机的feed键就变红),跟踪模式看纸张是否是连续的,连续纸选择连续,间隔纸选择Web检测,标记感应不清楚。操作模式选择了撕纸

      image
      image
      image

    打印时遇到的问题

    • 红框是纸张中需要打印的区域,期望打印出来的效果如黄框所示,但是实际打印结果却是绿框这样。

      image
      • 尝试:将打印首选项中标签格式中的纵向改为横向,但是问题没解决。
      • 解决:后来发现都昌的模板工具中,有页面打印设置这一选项,横纵向改变后(同时长宽也要各自调换),实际打印结果就能如黄框一般
      • 扩展1:如果使用类似word的富文本编辑器在页面上打印时,遇到上述问题,可以考虑更改编辑器中的打印选项。
      • 扩展2:如果没用富文本编辑器,直接写html,用window.print()打印时,遇到上述问题,将打印首选项中标签格式中的纵向改为横向,即可解决问题。
    • 一次打印多个,打印内容越打越后面,不在正确位置
      • 先确保满足了打印内容大小,打印首选项大小以及实物纸张大小 三者一致。
      • 检查打印机滚轮以及打印钢片(不知道怎么称呼)那边是否有污垢,会造成阻力,需要清理掉。
      • 实物纸张得是新的,不能重复使用,因为已经打印上的内容在滚轮滚动时会出现阻力。
      • 然后就是 尺子在手,天下我有。量出每次打印的偏移量,估求出平均值,改变打印内容的大小和打印首选项中大小的长度。
      • 我的经验就是以上四步,欢迎讨论指教。
    • 接上问题,原本调整好了打印也没有偏移,之后调整了打印机(取换了碳带,重新放了一卷打印纸),再打印,发现位置又偏了!
      • 说实话,超绝望~,变动一次调一次位置,这阻力变动的也太快了吧,可用性太低了
      • 解决:把打印首选项中的跟踪模式换了,从连续改为标记感应,偏移没有了(纸张用的是爱德手腕带,是连续纸也是标记纸)
      • 总结:遇到这种情况,可以尝试更改一下跟踪模式

    补充(window.print()打印标签,源码以及一些经验疑惑)

    ie浏览器要允许运行脚本或者ActiveX控件

    • 经验与疑惑
      • 本经验分享讨论前提:不使用其他插件,就只用jq。当然也可以使用类似lodop,添加一个object来实现,这种情况不讨论。
      • 将每块内容打印到每张贴纸上,需在每块内容上添加page-break-after:always;样式。[可搜索源码内容查看具体使用]
      • 曾尝试设置@page的css代码来控制打印的页面大小,但无效
      • 判断修改是否有效:选择xps document writer 打印机,保存为xps文件,打开,看页面边距,看是不是一张一张。
      • 如果是用浏览器的预览判断修改是否有效,可能这还涉及到浏览器的打印设置。
      • 后来发现,关于页面尺寸,xps打印机没有打印首选项,那就设置斑马打印机的首选项(红框红圈),点击应用后,再选回xps打印机(绿框绿圈),点击应用后,点击打印。页面尺寸就能按照首选项设定的大小来。
        image
      • 我实验下来,只要设置好了每块内容的长和宽(单位需要是cm或者英寸,不能用px),打印首选项的大小(并且生效了),以及加上了page-break-after,就能保证每块内容打印在特定大小的纸上。
    • 源码
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>标签打印</title>
    	<meta charset="utf-8" />
    	<!-- <script type="text/javascript" src="./jquery-1.7.2-min.js"></script>  -->
    	<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>
        <script type="text/javascript">
            $(function () {  
                //alert("1");
                $.each($(".singleInfo .singleInfoRight"), function (k, v) {
                    if (k >= 0) {
                        var $checkbox = $(v).find("input[type='checkbox']"); 
                            $checkbox.prop("checked", "true");
                         
                    }
                })
     
    
                //if (getExplorer() == "IE") { 
                    pagesetup_null(); //删除打印页面的页眉页脚
                //}
     
            }) 
            
            //选中所有复选框
            function CheckAll(e) {
                var isAll = $(e).is(':checked');
                $.each($(".singleInfo .singleInfoRight"), function (k, v) {
                    if (k >= 0) { 
                        var $checkbox = $(v).find("input[type='checkbox']");
                        if (isAll) {
                            $checkbox.prop("checked", "true");
                        }
                        else {
                            $checkbox.removeAttr("checked");
                        }
                    }
                })
            }
    
            //单个复选框点击事件
            function singleCheckboxClick(e) {
                var ischecked = $(e).is(':checked');
                if (!ischecked) {
                    $("#totalcheckbox").removeAttr("checked");
                }
            }
    
            //打印
            function labelPrint() {
                var printhtml = "";
                var codelist = [];
                $(".singleInfoRight>input:checked").each(function (i, item) {
                    var content = $(this).parent().prev(); 
                    codelist.push($(this).parent().parent().attr("code")); 
                    printhtml = printhtml + content.prop("outerHTML"); 
                })
                if (printhtml == "") {
                    window.external.MessageShow(0, "请先选中需要打印的标签");
                    return false;
                }   
    			var bodyHtml = document.body.innerHTML;
    			document.body.innerHTML = printhtml;
    			window.print();
    			document.body.innerHTML = bodyHtml; 
                  
                
            }
             
            //获取当前浏览器
            function getExplorer() {
                var explorer = window.navigator.userAgent;
                //ie
                if (explorer.indexOf("MSIE") >= 0) {
                    return "IE";
                }
                    //firefox
                else if (explorer.indexOf("Firefox") >= 0) {
                    return "Firefox";
                }
                    //Chrome
                else if (explorer.indexOf("Chrome") >= 0) {
                    return "Chrome";
                }
                    //Opera
                else if (explorer.indexOf("Opera") >= 0) {
                    return "Opera";
                }
                    //Safari
                else if (explorer.indexOf("Safari") >= 0) {
                    return "Safari";
                }
            }
    
            //删除打印页面的页眉页脚
            function pagesetup_null() {
               // alert("1");
                var hkey_root, hkey_path, hkey_key;
                hkey_root = "HKEY_CURRENT_USER";
                hkey_path = "\Software\Microsoft\Internet Explorer\PageSetup\";
                try {
                    var RegWsh = new ActiveXObject("WScript.Shell");
                    hkey_key = "header";
                    RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
                    hkey_key = "footer";
                    RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
                    hkey_key = "margin_left";
                    RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "0");
                    //RegWsh.sendKeys('%fu');
                } catch (e) {
    
                }
            } 
        </script>
        <style type="text/css">
            @media screen{ 
                #allcontent{
                    height:670px;
                    62%;
                    display:block;
                    margin-top:10px;
                    margin-left:10px;
                    /*overflow-y:scroll;*/
                }
                .singleInfo{
                     300px;
                    box-shadow: 4px 4px 4px 4px rgba(0,0,0,0.16);
                    -webkit-border-radius: 3px;
                    font-family:"微软雅黑";
                    -moz-border-radius: 3px;
                    border-radius: 3px; 
                    height:204px;
                    background-color:rgba(255, 255, 255, 1);
                    float:left;
                    margin-right:20px;
                    margin-bottom:20px;
                } 
                .singleInfoLeft{
                    95%;
                    float:left;
                    font-size:13px;
                    /*7cm;
                    height:5.5cm;
                    page-break-after:always;*/
                }
                .singleInfoRight{
                    5%;
                    float:left;
                } 
                  .allDrug{
                    70%;
                    height:120px;
                    border:1px solid;
                    float:left;
                }
            }
    
            @media print{
                /*@page{
                    size:A4 portrait;
                    margin-left:0;
                }*/
              .singleInfoLeft{  
                    font-size:15px;
                    8cm;
                    height:6cm;
                    display:block;/*page-break-after:always;*/ 
                    background-color:white;
                } 
                .singleInfoLeft:not(:last-of-type) {
                    page-break-after:always;
                }
                .allDrug{
                    70%;
                    height:3.5cm;
                    border:1px solid;
                    float:left;
                }
            } 
    
            .allDrug>div{
                margin-left:5px;
                margin-top:5px;
            }
    
            .brname{
                font-weight:bold;
                font-size:19px;
            }
             
            .qrcode{
                25%; 
    			float:left;
    			background-color:black;
            }
            
            .yyewmblock{
                overflow:hidden;
            } 
            .pysj,.hsname{ 
                display:inline-block;
                85px;
                height:15px;
                border-bottom:solid 1px;
            } 
    
            .singleDrug{
                font-size:13px;
            }
        </style>
    </head>
    <body>   
     <input id="totalcheckbox" type="checkbox" onclick="CheckAll(this)" />全选
     <input type="button" value="打印" onclick="labelPrint()" />
        <div id="allcontent">  
            <div class="singleInfo">
                <div class="singleInfoLeft" media="print">
                    <div>
                        <span class="brname">红萝卜</span>
                        <span class="zyh">00044383</span>
                        <span class="xb">男</span>
                        <span class="ch">C1001</span>
                        <span class="bq">梦想家园</span>
                    </div>
                    <div class="yyewmblock">
                        <div class="allDrug">
                            <div class="singleDrug">
                                <div>
                                    <span class="drugname">精炼食盐</span>&nbsp;&nbsp;<span class="druggg">250ml</span>
                                </div>
                                <div>
                                    检测结果(合格) &nbsp;&nbsp; 批次:<span class="psph">18.10.31</span>
                                </div>
                            </div>
                        </div>
                        <div class="qrcode">
                        </div>
                    </div>
                    <div>
                        <span class="syfs">食品添加</span>&nbsp;&nbsp;<span class="pl">一天不可超过200mg</span>
                    </div>
                    <div>
                        <span class="sczxdsj">2018-08-10 16:50:12</span>
                    </div>
                    <div class="singlelastdiv">
                        <span>购买时间:</span><span class="gmsj">2018-10-31</span>
                        <span>购买人:</span><span class="gmr">红参</span>
                    </div>
                </div>
                <div class="singleInfoRight"><input type="checkbox" onclick="singleCheckboxClick(this)"/></div>
            </div>
              <div class="singleInfo">
                <div class="singleInfoLeft" media="print">
                    <div>
                        <span class="brname">红萝卜</span>
                        <span class="zyh">00044383</span>
                        <span class="xb">男</span>
                        <span class="ch">C1001</span>
                        <span class="bq">梦想家园</span>
                    </div>
                    <div class="yyewmblock">
                        <div class="allDrug">
                            <div class="singleDrug">
                                <div>
                                    <span class="drugname">精炼食盐</span>&nbsp;&nbsp;<span class="druggg">250ml</span>
                                </div>
                                <div>
                                    检测结果(合格) &nbsp;&nbsp; 批次:<span class="psph">18.10.31</span>
                                </div>
                            </div>
                        </div>
                        <div class="qrcode">
                        </div>
                    </div>
                    <div>
                        <span class="syfs">食品添加</span>&nbsp;&nbsp;<span class="pl">一天不可超过200mg</span>
                    </div>
                    <div>
                        <span class="sczxdsj">2018-08-10 16:50:12</span>
                    </div>
                    <div class="singlelastdiv">
                        <span>购买时间:</span><span class="gmsj">2018-10-31</span>
                        <span>购买人:</span><span class="gmr">红参</span>
                    </div>
                </div>
                <div class="singleInfoRight"><input type="checkbox" onclick="singleCheckboxClick(this)"/></div>
            </div>
        </div>  
    </body>
    </html> 
    
  • 相关阅读:
    DB2 关联更新
    postgresql 开启审计日志
    Delphi D10.X中Tpath引发的单元引用及代码编写的思考
    自己写的函数或者过程与Delphi提供的重名了怎么办?(50分)
    技巧四 Delphi XE3 代码自动提示bug解决
    想开发经典界面吗?
    初涉Delphi下Windows消息机制——同一程序内自定义消息实例
    Delphi的DirectShow开发概述
    delphi接口(抄自万一)
    fkInternalCalc和fkCalculated有何区别?
  • 原文地址:https://www.cnblogs.com/achigwwblog/p/9889685.html
Copyright © 2011-2022 走看看