前言

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

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

简述

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

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

打印设置的注意事项

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

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

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





打印时遇到的问题

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

    • 尝试:将打印首选项中标签格式中的纵向改为横向,但是问题没解决。
    • 解决:后来发现都昌的模板工具中,有页面打印设置这一选项,横纵向改变后(同时长宽也要各自调换),实际打印结果就能如黄框一般
    • 扩展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打印机(绿框绿圈),点击应用后,点击打印。页面尺寸就能按照首选项设定的大小来。

    • 我实验下来,只要设置好了每块内容的长和宽(单位需要是cm或者英寸,不能用px),打印首选项的大小(并且生效了),以及加上了page-break-after,就能保证每块内容打印在特定大小的纸上。
  • 源码
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  5. <title>标签打印</title>
  6. <meta charset="utf-8" />
  7. <!-- <script type="text/javascript" src="./jquery-1.7.2-min.js"></script> -->
  8. <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>
  9. <script type="text/javascript">
  10. $(function () {
  11. //alert("1");
  12. $.each($(".singleInfo .singleInfoRight"), function (k, v) {
  13. if (k >= 0) {
  14. var $checkbox = $(v).find("input[type='checkbox']");
  15. $checkbox.prop("checked", "true");
  16. }
  17. })
  18. //if (getExplorer() == "IE") {
  19. pagesetup_null(); //删除打印页面的页眉页脚
  20. //}
  21. })
  22. //选中所有复选框
  23. function CheckAll(e) {
  24. var isAll = $(e).is(':checked');
  25. $.each($(".singleInfo .singleInfoRight"), function (k, v) {
  26. if (k >= 0) {
  27. var $checkbox = $(v).find("input[type='checkbox']");
  28. if (isAll) {
  29. $checkbox.prop("checked", "true");
  30. }
  31. else {
  32. $checkbox.removeAttr("checked");
  33. }
  34. }
  35. })
  36. }
  37. //单个复选框点击事件
  38. function singleCheckboxClick(e) {
  39. var ischecked = $(e).is(':checked');
  40. if (!ischecked) {
  41. $("#totalcheckbox").removeAttr("checked");
  42. }
  43. }
  44. //打印
  45. function labelPrint() {
  46. var printhtml = "";
  47. var codelist = [];
  48. $(".singleInfoRight>input:checked").each(function (i, item) {
  49. var content = $(this).parent().prev();
  50. codelist.push($(this).parent().parent().attr("code"));
  51. printhtml = printhtml + content.prop("outerHTML");
  52. })
  53. if (printhtml == "") {
  54. window.external.MessageShow(0, "请先选中需要打印的标签");
  55. return false;
  56. }
  57. var bodyHtml = document.body.innerHTML;
  58. document.body.innerHTML = printhtml;
  59. window.print();
  60. document.body.innerHTML = bodyHtml;
  61. }
  62. //获取当前浏览器
  63. function getExplorer() {
  64. var explorer = window.navigator.userAgent;
  65. //ie
  66. if (explorer.indexOf("MSIE") >= 0) {
  67. return "IE";
  68. }
  69. //firefox
  70. else if (explorer.indexOf("Firefox") >= 0) {
  71. return "Firefox";
  72. }
  73. //Chrome
  74. else if (explorer.indexOf("Chrome") >= 0) {
  75. return "Chrome";
  76. }
  77. //Opera
  78. else if (explorer.indexOf("Opera") >= 0) {
  79. return "Opera";
  80. }
  81. //Safari
  82. else if (explorer.indexOf("Safari") >= 0) {
  83. return "Safari";
  84. }
  85. }
  86. //删除打印页面的页眉页脚
  87. function pagesetup_null() {
  88. // alert("1");
  89. var hkey_root, hkey_path, hkey_key;
  90. hkey_root = "HKEY_CURRENT_USER";
  91. hkey_path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
  92. try {
  93. var RegWsh = new ActiveXObject("WScript.Shell");
  94. hkey_key = "header";
  95. RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
  96. hkey_key = "footer";
  97. RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "");
  98. hkey_key = "margin_left";
  99. RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "0");
  100. //RegWsh.sendKeys('%fu');
  101. } catch (e) {
  102. }
  103. }
  104. </script>
  105. <style type="text/css">
  106. @media screen{
  107. #allcontent{
  108. height:670px;
  109. width:62%;
  110. display:block;
  111. margin-top:10px;
  112. margin-left:10px;
  113. /*overflow-y:scroll;*/
  114. }
  115. .singleInfo{
  116. width: 300px;
  117. box-shadow: 4px 4px 4px 4px rgba(0,0,0,0.16);
  118. -webkit-border-radius: 3px;
  119. font-family:"微软雅黑";
  120. -moz-border-radius: 3px;
  121. border-radius: 3px;
  122. height:204px;
  123. background-color:rgba(255, 255, 255, 1);
  124. float:left;
  125. margin-right:20px;
  126. margin-bottom:20px;
  127. }
  128. .singleInfoLeft{
  129. width:95%;
  130. float:left;
  131. font-size:13px;
  132. /*width:7cm;
  133. height:5.5cm;
  134. page-break-after:always;*/
  135. }
  136. .singleInfoRight{
  137. width:5%;
  138. float:left;
  139. }
  140. .allDrug{
  141. width:70%;
  142. height:120px;
  143. border:1px solid;
  144. float:left;
  145. }
  146. }
  147. @media print{
  148. /*@page{
  149. size:A4 portrait;
  150. margin-left:0;
  151. }*/
  152. .singleInfoLeft{
  153. font-size:15px;
  154. width:8cm;
  155. height:6cm;
  156. display:block;/*page-break-after:always;*/
  157. background-color:white;
  158. }
  159. .singleInfoLeft:not(:last-of-type) {
  160. page-break-after:always;
  161. }
  162. .allDrug{
  163. width:70%;
  164. height:3.5cm;
  165. border:1px solid;
  166. float:left;
  167. }
  168. }
  169. .allDrug>div{
  170. margin-left:5px;
  171. margin-top:5px;
  172. }
  173. .brname{
  174. font-weight:bold;
  175. font-size:19px;
  176. }
  177. .qrcode{
  178. width:25%;
  179. float:left;
  180. background-color:black;
  181. }
  182. .yyewmblock{
  183. overflow:hidden;
  184. }
  185. .pysj,.hsname{
  186. display:inline-block;
  187. width:85px;
  188. height:15px;
  189. border-bottom:solid 1px;
  190. }
  191. .singleDrug{
  192. font-size:13px;
  193. }
  194. </style>
  195. </head>
  196. <body>
  197. <input id="totalcheckbox" type="checkbox" onclick="CheckAll(this)" />全选
  198. <input type="button" value="打印" onclick="labelPrint()" />
  199. <div id="allcontent">
  200. <div class="singleInfo">
  201. <div class="singleInfoLeft" media="print">
  202. <div>
  203. <span class="brname">红萝卜</span>
  204. <span class="zyh">00044383</span>
  205. <span class="xb"></span>
  206. <span class="ch">C1001</span>
  207. <span class="bq">梦想家园</span>
  208. </div>
  209. <div class="yyewmblock">
  210. <div class="allDrug">
  211. <div class="singleDrug">
  212. <div>
  213. <span class="drugname">精炼食盐</span>&nbsp;&nbsp;<span class="druggg">250ml</span>
  214. </div>
  215. <div>
  216. 检测结果(合格) &nbsp;&nbsp; 批次:<span class="psph">18.10.31</span>
  217. </div>
  218. </div>
  219. </div>
  220. <div class="qrcode">
  221. </div>
  222. </div>
  223. <div>
  224. <span class="syfs">食品添加</span>&nbsp;&nbsp;<span class="pl">一天不可超过200mg</span>
  225. </div>
  226. <div>
  227. <span class="sczxdsj">2018-08-10 16:50:12</span>
  228. </div>
  229. <div class="singlelastdiv">
  230. <span>购买时间:</span><span class="gmsj">2018-10-31</span>
  231. <span>购买人:</span><span class="gmr">红参</span>
  232. </div>
  233. </div>
  234. <div class="singleInfoRight"><input type="checkbox" onclick="singleCheckboxClick(this)"/></div>
  235. </div>
  236. <div class="singleInfo">
  237. <div class="singleInfoLeft" media="print">
  238. <div>
  239. <span class="brname">红萝卜</span>
  240. <span class="zyh">00044383</span>
  241. <span class="xb"></span>
  242. <span class="ch">C1001</span>
  243. <span class="bq">梦想家园</span>
  244. </div>
  245. <div class="yyewmblock">
  246. <div class="allDrug">
  247. <div class="singleDrug">
  248. <div>
  249. <span class="drugname">精炼食盐</span>&nbsp;&nbsp;<span class="druggg">250ml</span>
  250. </div>
  251. <div>
  252. 检测结果(合格) &nbsp;&nbsp; 批次:<span class="psph">18.10.31</span>
  253. </div>
  254. </div>
  255. </div>
  256. <div class="qrcode">
  257. </div>
  258. </div>
  259. <div>
  260. <span class="syfs">食品添加</span>&nbsp;&nbsp;<span class="pl">一天不可超过200mg</span>
  261. </div>
  262. <div>
  263. <span class="sczxdsj">2018-08-10 16:50:12</span>
  264. </div>
  265. <div class="singlelastdiv">
  266. <span>购买时间:</span><span class="gmsj">2018-10-31</span>
  267. <span>购买人:</span><span class="gmr">红参</span>
  268. </div>
  269. </div>
  270. <div class="singleInfoRight"><input type="checkbox" onclick="singleCheckboxClick(this)"/></div>
  271. </div>
  272. </div>
  273. </body>
  274. </html>

c# asp.net mvc使用斑马GK888t打印机打印标签的更多相关文章

  1. ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素

    阅读目录 Bootstrap 栅格(Grid)系统 Bootstrap HTML元素 Bootstrap 验证样式 ASP.NET MVC创建包含Bootstrap样式编辑模板 小结 Bootstra ...

  2. 【转】asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别

    原文地址:http://blog.csdn.net/luoyeyu1989/article/details/8275866 首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BL ...

  3. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  5. asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866

    首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BLL(业务逻辑层).WEB层各司其职,意在职责分离. MVC是 Model-View-Controller,严格说这三个加起来 ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  8. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  9. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

随机推荐

  1. ibatis .net $与#的区别

    $与#的区别 SELECT * FROM TABLE WHERE Id = #id# 其中如果字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号.如果id为整型,那么#id#就 ...

  2. .net 解压缩 rar文件

    public static class RARHelper { public static bool ExistsWinRar() { bool result = false; string key ...

  3. Contest2195 - 2019-4-25 高一noip基础知识点 测试8 题解版

    (因为david_alwal太懒了,所以本期题解作者为Th Au K,码风不同请自行适应) 传送门 T1 BFS?贪心?我也说不清 反正就是对每一个“#”搜一下他的旁边有没有“#”就行了 代码 T2 ...

  4. git add . 提示 `Changes not staged for commit`

  5. Beans 自动装配

    http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html

  6. tp5.0 queue 队列操作

    检查是否安装redis(没有请自行百度安装): phpinfo: 配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入: 创建 ...

  7. 5. SpringBoot —— Actuator简介

    Actuator是SpringBoot提供的用来帮助我们在将应用程序推向生产环境时对其进行监视和管理的工具集.使用Actuator最简单的方式,就是在pom文件中添加如下依赖: <depende ...

  8. python3.5 默认安装路径 | 安装 | 删除

    win7 环境下: Python3.5默认安装路径是当前用户的 AppData\..  下 这么做的一个可能原因是 现在安装过程中默认是install just for me,这个会把python默认 ...

  9. 走进异步编程的世界 - 开始接触 async/await(转)

    序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Fo ...

  10. Date——js 获取当前日期到之后一个月30天的日期区间

    var dateList = []; let startDate = new Date(); let endDate = new Date(); endDate.setDate(startDate.g ...