C#-WinForm平台如何设计标签(斑马)打印机打印模块

兵工厂三剑客 2015-06-17 09:50:05
我现在做一个标签打印软件,打印机是TSC的TTP-247,TTP-244CE。最开始的设计方法(思路)是使用GDI+绘图,然后把模板保存为图片的形式,尝试了下,感觉不太现实。因为无法解析图片中的动态变量(需要更新的字符)的位置,更不可能对图片模板进行编辑了。我看了Label Matrix这个软件,它的模块导入到软件后,就可以对模板中的动态变量进行编辑。我也想实现这样的功能。

我的想法是这样的,我设计好打印模板后,模板中有一部分数据是需要更新的,比如MAC号,SN号和它对应的条形码,打印机打印完标签后,就将模板中的数据保存到数据库当中。使用人员用了这个模板后,可能会再次使用,那么可以保存这个模板。下次他就导入这个模板就可以了,那么下次导入的时候,就需要解析模板中的数据,可以对数据进行编辑,或者对模板进行二次修改。

请大家指点下,怎么设计这个可以进行二次编辑的模板,用哪些技术比较好。我一直用的是WinForm平台。
感谢了啊,困扰我几天了,还没有找到合适的方法。
...全文
2399 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码打字员 2018-10-13
  • 打赏
  • 举报
回复
Grid++Report报表工具C/S实战篇(五)
https://www.cnblogs.com/51net/p/9074197.html
兵工厂三剑客 2015-06-30
  • 打赏
  • 举报
回复
感谢大家的帮助,我用32楼网友推荐的grid++report控件实现了我的部分构思。这个控件确实很方便。支持国产。
guoqd 2015-06-26
  • 打赏
  • 举报
回复
我使用的水晶报表打印条码
本拉灯 2015-06-26
  • 打赏
  • 举报
回复
引用 38 楼 SCGH_Fx 的回复:
[quote=引用 35 楼 wyd1520 的回复:] 班码的打印机那种小个的,都是通过ZPL语言转输给打印机的,他不像一般的打印机那样可以自己GDI+, Label Matrix这个软件也是一样的表面上看你所见即所得,他编译后发给打印机就是转换成ZPL语言的, 这个我之前在公司就搞过,把他的ZPL变成XML就容易理解了 XML->解析XML->Zpl ->SendTo 打印机 这是我把他的ZPL变成容易理解的XML可以自由配置的 然后再通过XML解析 转成ZPL再发给打印机。

<Page  TopMargin="2" LeftMargin="2"  Width="80" Height="52" Inverted="Y" Continuation="N">
     <PrintItem ID="1">
	    <Text Name="ITEM_CODE" Text="[ITEM_CODE]" X="3" Y="4"  Font="0" Direction="N" Width="3" Height="3"  />
        <Bardcode Name="ITEM_CODE" Text="[ITEM_CODE]" X="3.5" Y="7" Multiple="1" Direction="N" Height="6" VisibleText="N" TextOnTop="N" />
		<Line Name="Line" X="3" Y="14"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_SPEC" Text="[ITEM_SPEC]" X="3" Y="15.5"  Font="1" Direction="N" Width="3" Height="3"  />
		<Line Name="Line" X="3" Y="19"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_JZ" Text="[ITEM_JZ]" X="3" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Text Name="ITEM_QYT" Text="QTY:[ITEM_QYT]" X="9" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Bardcode Name="ITEM_QYT" Text="[ITEM_QYT]" X="3" Y="23" Multiple="2" Direction="N" Height="4" VisibleText="N" TextOnTop="N" />
        <Text Name="ITEM_DATE" Text="[ITEM_DATE]" X="24" Y="23.5"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_TIME" Text="[ITEM_TIME]" X="25" Y="26"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_USER" Text="签名:  [ITEM_USER]" X="40" Y="24.5"  Font="1" Direction="N"  Width="3" Height="3"  />
		<Text Name="ITEM_USER" Text="Hisense" X="52" Y="3"  Font="1" Direction="N"  Width="4" Height="4"  />
     </PrintItem>
</Page>

我已经晕了。你的这个方法理解到是能理解,但是我实现起来,还有很多地方不会啊。[/quote] 你所说的晕可以理解,当初我实现这个,也是把他的ZPL语言一个一个测试,学习才会的,最后总结,并写出上面的那个XML转换。。 班码移动式QL420打印机 最好用ZPL语言打印,其他的我没试成功,生成的条码精度非常高。 如果是台式的,到可以用FastReport做模板
兵工厂三剑客 2015-06-26
  • 打赏
  • 举报
回复
引用 41 楼 guoqd 的回复:
我使用的水晶报表打印条码
你好。我之前没使用过水晶报表。我想问问,使用水晶报表打印条码的时候,模板是不是在VStudio开发环境里面事先制作好的,然后在软件里面调用*.rpt文件开始打印。而不是在开发好的软件里面,脱离VStudio环境来制作。 也就是说,*.rpt这个打印模板,是不是必须在VStudio环境里面来制作。我下载了几个水晶报表实例,看了些例子。模板怎么都是在VStudio环境下来做的。
兵工厂三剑客 2015-06-25
  • 打赏
  • 举报
回复
引用 31 楼 jn40105 的回复:
过来 学习下 我也是搞了好久没有搞定
一起学习。你的功能需求是怎么样的呢。 自己绘制模板感觉太老火了,我现在一个人还搞不定。
兵工厂三剑客 2015-06-25
  • 打赏
  • 举报
回复
引用 37 楼 zbdzjx 的回复:
http://blog.csdn.net/JustLovePro/article/details/2246339 [quote=引用 13 楼 SCGH_Fx 的回复:] [quote=引用 10 楼 zbdzjx 的回复:] [quote=引用 8 楼 SCGH_Fx 的回复:] [quote=引用 6 楼 zbdzjx 的回复:] 我们是用CodeSoft设计模板,然后在系统中调用这个模板,给里面的变量付值,再打印。
是第三方控件吗。[/quote] 我 用CodeSoft设计好模板后,保存成文件,然后在C#中引用CodeSoft,调用这个模板文件,再设定模板中的变量值,就可以打印了。 [/quote] 你好,请教下这一步具体该如何做呢。我的困惑在: (1)如何引用CodeSoft。 (2)调用模板文件。 (3)设定模板变量值。 这3点,可以帮忙指点下或者有相关链接资源学习下吗。[/quote][/quote] 我尝试下,看能不能实现功能需求。自己绘制模板目前还是能力不及。
兵工厂三剑客 2015-06-25
  • 打赏
  • 举报
回复
引用 35 楼 wyd1520 的回复:
班码的打印机那种小个的,都是通过ZPL语言转输给打印机的,他不像一般的打印机那样可以自己GDI+, Label Matrix这个软件也是一样的表面上看你所见即所得,他编译后发给打印机就是转换成ZPL语言的, 这个我之前在公司就搞过,把他的ZPL变成XML就容易理解了 XML->解析XML->Zpl ->SendTo 打印机 这是我把他的ZPL变成容易理解的XML可以自由配置的 然后再通过XML解析 转成ZPL再发给打印机。

<Page  TopMargin="2" LeftMargin="2"  Width="80" Height="52" Inverted="Y" Continuation="N">
     <PrintItem ID="1">
	    <Text Name="ITEM_CODE" Text="[ITEM_CODE]" X="3" Y="4"  Font="0" Direction="N" Width="3" Height="3"  />
        <Bardcode Name="ITEM_CODE" Text="[ITEM_CODE]" X="3.5" Y="7" Multiple="1" Direction="N" Height="6" VisibleText="N" TextOnTop="N" />
		<Line Name="Line" X="3" Y="14"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_SPEC" Text="[ITEM_SPEC]" X="3" Y="15.5"  Font="1" Direction="N" Width="3" Height="3"  />
		<Line Name="Line" X="3" Y="19"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_JZ" Text="[ITEM_JZ]" X="3" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Text Name="ITEM_QYT" Text="QTY:[ITEM_QYT]" X="9" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Bardcode Name="ITEM_QYT" Text="[ITEM_QYT]" X="3" Y="23" Multiple="2" Direction="N" Height="4" VisibleText="N" TextOnTop="N" />
        <Text Name="ITEM_DATE" Text="[ITEM_DATE]" X="24" Y="23.5"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_TIME" Text="[ITEM_TIME]" X="25" Y="26"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_USER" Text="签名:  [ITEM_USER]" X="40" Y="24.5"  Font="1" Direction="N"  Width="3" Height="3"  />
		<Text Name="ITEM_USER" Text="Hisense" X="52" Y="3"  Font="1" Direction="N"  Width="4" Height="4"  />
     </PrintItem>
</Page>

我已经晕了。你的这个方法理解到是能理解,但是我实现起来,还有很多地方不会啊。
zbdzjx 2015-06-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/JustLovePro/article/details/2246339
引用 13 楼 SCGH_Fx 的回复:
[quote=引用 10 楼 zbdzjx 的回复:] [quote=引用 8 楼 SCGH_Fx 的回复:] [quote=引用 6 楼 zbdzjx 的回复:] 我们是用CodeSoft设计模板,然后在系统中调用这个模板,给里面的变量付值,再打印。
是第三方控件吗。[/quote] 用CodeSoft设计好模板后,保存成文件,然后在C#中引用CodeSoft,调用这个模板文件,再设定模板中的变量值,就可以打印了。 [/quote] 你好,请教下这一步具体该如何做呢。我的困惑在: (1)如何引用CodeSoft。 (2)调用模板文件。 (3)设定模板变量值。 这3点,可以帮忙指点下或者有相关链接资源学习下吗。[/quote]
leeya66 2015-06-22
  • 打赏
  • 举报
回复
编辑完的内容,也就是你所谓的模板,他不是一个 信息,应该是有很多个字段,甚至几张表来描述,这样你就会豁然开朗了
本拉灯 2015-06-20
  • 打赏
  • 举报
回复
班码的打印机那种小个的,都是通过ZPL语言转输给打印机的,他不像一般的打印机那样可以自己GDI+, Label Matrix这个软件也是一样的表面上看你所见即所得,他编译后发给打印机就是转换成ZPL语言的, 这个我之前在公司就搞过,把他的ZPL变成XML就容易理解了 XML->解析XML->Zpl ->SendTo 打印机 这是我把他的ZPL变成容易理解的XML可以自由配置的 然后再通过XML解析 转成ZPL再发给打印机。

<Page  TopMargin="2" LeftMargin="2"  Width="80" Height="52" Inverted="Y" Continuation="N">
     <PrintItem ID="1">
	    <Text Name="ITEM_CODE" Text="[ITEM_CODE]" X="3" Y="4"  Font="0" Direction="N" Width="3" Height="3"  />
        <Bardcode Name="ITEM_CODE" Text="[ITEM_CODE]" X="3.5" Y="7" Multiple="1" Direction="N" Height="6" VisibleText="N" TextOnTop="N" />
		<Line Name="Line" X="3" Y="14"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_SPEC" Text="[ITEM_SPEC]" X="3" Y="15.5"  Font="1" Direction="N" Width="3" Height="3"  />
		<Line Name="Line" X="3" Y="19"  Width="80" Border="2" Vertical="N"/>
		<Text Name="ITEM_JZ" Text="[ITEM_JZ]" X="3" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Text Name="ITEM_QYT" Text="QTY:[ITEM_QYT]" X="9" Y="20"  Font="0" Direction="N"  Width="2" Height="3"  />
		<Bardcode Name="ITEM_QYT" Text="[ITEM_QYT]" X="3" Y="23" Multiple="2" Direction="N" Height="4" VisibleText="N" TextOnTop="N" />
        <Text Name="ITEM_DATE" Text="[ITEM_DATE]" X="24" Y="23.5"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_TIME" Text="[ITEM_TIME]" X="25" Y="26"  Font="0" Direction="N"  Width="2" Height="2"  />
		<Text Name="ITEM_USER" Text="签名:  [ITEM_USER]" X="40" Y="24.5"  Font="1" Direction="N"  Width="3" Height="3"  />
		<Text Name="ITEM_USER" Text="Hisense" X="52" Y="3"  Font="1" Direction="N"  Width="4" Height="4"  />
     </PrintItem>
</Page>

道玄希言 2015-06-19
  • 打赏
  • 举报
回复
如果你生成完条码后, 啥都不保存, 只最终生成出来的条码为模板, 不好回溯額 在保存这个模板的时候, 你就將哪个地方有什么东西, MAC号放哪里, SN 显示在哪里 等等这些的位置等,都保存好了 当用户打开模板页, 选择了相应的模板后, 你也通过保存的文件, 立即就知道了这个模板是怎么生成的了, 这个时候, 接收到需要替换的数据, 替换了重新生成个条码就行了額.
道玄希言 2015-06-19
  • 打赏
  • 举报
回复
你可以保存好每个模板生成时的所有参数額 每次加载一个模板的时候, 因为你有模板生成时的所有参数, 那就可以直接反向还原了啊... 新入了 MAC号,SN号 后, 替换下参数, 重新生成就好了.
道玄希言 2015-06-19
  • 打赏
  • 举报
回复
你的这些模板, 是通过打印机的自带的条码生成程序生成的, 而不是你自己写程序来生成的吧.
兵工厂三剑客 2015-06-19
  • 打赏
  • 举报
回复
引用 19 楼 yangb0803 的回复:
看了半天 , 感觉楼主是想对显示屏上显示出来的一个已经生成的条形码来进行修改? 然后再 打印出仓库出货的条码? 你的意思是, 因为每个货物的 MAC号, SN号, 都是变化的, 比如手机出厂... 你需要打印的条码, 是包含这些信息的一个条码, 我的理解是这样么? 扫描当前设备的MAC号,SN号, 这一步, 应该是通过扫描枪扫进来吧, 你的条码生成函数你知道啊 那为什么还要去解析那个模板? 我们可以將这些信息, 重新生成一个合乎你的设计规则的条码来的. 扫描抢扫进来一个数据, 你就重新生成一个条码...
由MAC号,SN号,生成它们对应的条码我已经实现了。
兵工厂三剑客 2015-06-19
  • 打赏
  • 举报
回复
引用 19 楼 yangb0803 的回复:
看了半天 , 感觉楼主是想对显示屏上显示出来的一个已经生成的条形码来进行修改? 然后再 打印出仓库出货的条码? 你的意思是, 因为每个货物的 MAC号, SN号, 都是变化的, 比如手机出厂... 你需要打印的条码, 是包含这些信息的一个条码, 我的理解是这样么? 扫描当前设备的MAC号,SN号, 这一步, 应该是通过扫描枪扫进来吧, 你的条码生成函数你知道啊 那为什么还要去解析那个模板? 我们可以將这些信息, 重新生成一个合乎你的设计规则的条码来的. 扫描抢扫进来一个数据, 你就重新生成一个条码...
你的理解89不离10了。因为是流水线用的软件。所以应该有个标准的打印模板。这次用了这个模板,下次还可以接着用。不用重新设计打印模板,这样可以节省时间,而且重新设计的话,打印模板的大小,信息的位置不能保证一模一样。所以,如果我保存了当前使用的打印模板A,那么下次导入这个模板A的时候,怎么知道模板里面的哪些信息(比如MAC,SN,条形码)是我要更新的,而且更新位置也要获取到,我的理解就是解析模板。 你说的设计规则,我的理解实际上就是一个模板。
道玄希言 2015-06-19
  • 打赏
  • 举报
回复
看了半天 , 感觉楼主是想对显示屏上显示出来的一个已经生成的条形码来进行修改? 然后再 打印出仓库出货的条码? 你的意思是, 因为每个货物的 MAC号, SN号, 都是变化的, 比如手机出厂... 你需要打印的条码, 是包含这些信息的一个条码, 我的理解是这样么? 扫描当前设备的MAC号,SN号, 这一步, 应该是通过扫描枪扫进来吧, 你的条码生成函数你知道啊 那为什么还要去解析那个模板? 我们可以將这些信息, 重新生成一个合乎你的设计规则的条码来的. 扫描抢扫进来一个数据, 你就重新生成一个条码...
兵工厂三剑客 2015-06-19
  • 打赏
  • 举报
回复
引用 14 楼 Z65443344 的回复:
不需要什么"模板" 如果你硬要将编码叫做模板的话,那么所谓模板就是个函数而已 传入Logo字符串和条码字符串,生成一个包含条码图片和这2个字符串的图片 千万不要用图片当模板,那样你还要先解析图片,费了2遍劲.
我看了2个条形码打印软件,都支持绘制模板,导入模板的功能,而且导入的模板可以进行再编辑。我指的模板是一个文档(或者图片,或者其他)。模板里面有Logo,MAC号,SN号,条形码,公司名称等其他信息。我现在就是放弃了用图片做模板的思路。 我现在的难点在于:不同设备的MAC号,SN号,及其对应的条形码是不同的。因为是用在流水线的,扫描当前设备的MAC号,SN号,要完成更新打印模板里面的上一个设备的MAC号,SN号,条形码。所以,我需要一个固定的打印模板,打开软件,直接导入模板工人就可以开始操作。我是这么个设计思路。
兵工厂三剑客 2015-06-19
  • 打赏
  • 举报
回复
引用 16 楼 q644415569 的回复:
[quote=引用 7 楼 SCGH_Fx 的回复:] [quote=引用 3 楼 zzh1063 的回复:] 第三方控件应该好点吧!像codesoft之类,比自己写方便!
貌似我没把重点讲清楚啊,感觉大家都说的是控件。我的困惑现在不是如何生成条形码。而且如何对打印模板中的数据进行解析。 比如下面这个模板: 它的MAC号在条形码下面。我导入这个模板的时候,我怎么知道(解析)这个MAC号是位于条形码下面正中央,而且点中MAC号的时候,可以对MAC号进行修改。 我就是想实现这么一个功能。[/quote] 你们公司在KS吗[/quote] 没有。领导让我给公司包装发货部门做的一个软件,就我一个人做,对绘制模板这个功能有点茫然+迷惑。
蜗牛慢慢趴 2015-06-19
  • 打赏
  • 举报
回复
引用 7 楼 SCGH_Fx 的回复:
[quote=引用 3 楼 zzh1063 的回复:] 第三方控件应该好点吧!像codesoft之类,比自己写方便!
貌似我没把重点讲清楚啊,感觉大家都说的是控件。我的困惑现在不是如何生成条形码。而且如何对打印模板中的数据进行解析。 比如下面这个模板: 它的MAC号在条形码下面。我导入这个模板的时候,我怎么知道(解析)这个MAC号是位于条形码下面正中央,而且点中MAC号的时候,可以对MAC号进行修改。 我就是想实现这么一个功能。[/quote] 你们公司在KS吗
加载更多回复(25)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧