huanent.printer2.0是一个专注消费小票打印的类库。拥有许多先进的特性例如居中打印、自动换行等特性,可以通过简洁的代码来打印出复杂的消费小票。huanent.printer通过MIT方式授权,可随意用于商业用途,只要注明作者即可。

你可以通过github获取源码与提交bug:https://github.com/huanent/Huanent.Printer

huanent.printer已上传至nuget,可在nuget直接搜索名称huanent.printer安装

下面三幅图是使用huanent.printer打印的80,76,58宽度的小票,不同宽度的小票只需切换一个属性值即可自动适应,标题绝对剧中,商品名称过长自动换行,分割线长度自适应。

android小票模板设计_github

android小票模板设计_自动换行_02

android小票模板设计_github_03

huanent.printer的使用也非常简单,首先获得电脑上所有打印机的名称列表



var printers = PrintQueueHelper.GetPrintQueueName();



从printers选择你的小票打印机名称,并使用此名称获得一个IPrinter打印对象



var printer = PrinterFactory.GetPrinter("xp80mm", PaperWidth.Paper80mm);



GetPrinter的第二个参数可以传入一个PaperWidth的枚举,预定义80,76,58三种宽度,也可以传入一个自定义的int值。
IPrinter对象有5个方法分别是:
  • PrintText
  • PrintImage
  • PrintLine
  • NewRow
  • Finish 

PrintText方法

PrintText方法可以灵活地指定文字的打印方式例如文字的剧中方式,可进行左,中,右对齐(必须调用Finish()方法打印机才会开始打印!)



printer.PrintText("你好",stringAlignment:StringAlignment.Center);
printer.PrintText("你好2", stringAlignment: StringAlignment.Far);
printer.Finish();



android小票模板设计_android小票模板设计_04

可以指定文字的最大宽度,如果超出宽度就会自动换行,width的取值范围为0到1,0.3代表纸张的百分之30宽度



printer.PrintText("一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十",width:0.3f);
printer.Finish();



android小票模板设计_分割线_05

 

 指定偏移量



printer.PrintText("一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十",width:0.3f,offset:0.2f);
printer.Finish();



android小票模板设计_github_06

指定字体大小(要还行需要显示调用NewRow()方法)



printer.PrintText("正", Printer.Models.FontSize.Huge);
printer.NewRow();
printer.PrintText("正");
printer.NewRow();
printer.PrintText("正",Printer.Models.FontSize.micro);
printer.NewRow();
printer.Finish();



android小票模板设计_自动换行_07

PrintImage方法

打印一张图片,图片也支持对齐方式



printer.PrintImage(new Bitmap("qr.png"),StringAlignment.Far);
printer.Finish();



android小票模板设计_github_08

PrintLine方法

PrintLine打印一条线条,如果需要在小票打印分割线建议使用此方法,而不是使用PrintText。因为PrintLine可以做到不同纸张的线条宽度自适应不会引起线条换行



printer.PrintLine();
printer.Finish();



android小票模板设计_自动换行_09

 

 NewRow方法

调用NewRow方法会引起换行,即使是一个PrintText中有多行,也可智能换行。



printer.PrintText("一二三四五六七八", width: 0.3f);
printer.PrintText("一二三四五六七八", width: 0.2f, offset: 0.4f);
printer.NewRow();
printer.PrintText("我是新的行");
printer.NewRow();
printer.Finish();



android小票模板设计_自动换行_10

 Finish方法

Finish方法很简单,以上的所有方法调用后都在缓冲区,调用Finish后会在小票机真实打印出单据,并清除缓冲区。所以在票据代码的末尾调用即可。