昨天突然接到任务,对接一下汉印的TP582打印机,打印机是USB接口的,使用起来很简单,所以画一下模板就行了。
小票的打印需求比较简单,罗列一些收费的数据就可以了,数据通过掉接口获取,然后手动拼接成字符串,调用打印方法就可以了。实现方法记录一下,代码如下:
/// <summary>
/// 打印58mm收费小票
/// </summary>
/// <param name="printStr"></param>
public void Print58(string printStr)
{
try
{
var printList = printStr.Split('\r', '\n').ToList();
var rows = printList.Count(o => !string.IsNullOrEmpty(o));
//打印预览
// var previewDialog = new PrintPreviewDialog();
var printDocument = new PrintDocument();
//设置边距
var margin = new Margins(1, 1, 10, 10);
printDocument.DefaultPageSettings.Margins = margin;
var height = (rows + 1) * 19;//计算高度(行数*行高)
var pageSize = new PaperSize("First custom size", (int)(58 * 100 / 25.4), height);//58mm
printDocument.DefaultPageSettings.PaperSize = pageSize;
//打印事件设置
printDocument.PrintPage += (a, b) =>
{
var font = new Font("Arial", 8, FontStyle.Regular);//字体设置
var yLocation = b.MarginBounds.Y; //Y轴打印位置
foreach (var print in printList)
{
float heightStep = 0;
if (!string.IsNullOrEmpty(print))
{
var size = b.Graphics.MeasureString(print, font);
heightStep = size.Height * 1.3f;//1.3倍行间距
b.Graphics.DrawString(print, font, Brushes.Black, 0, yLocation);
}
yLocation += Convert.ToInt32(heightStep);
}
b.Graphics.DrawString(".", font, Brushes.Black, 0, yLocation); //多打一行,因为汉印打印机不打空白行
};
printDocument.Print();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "打印收据失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我这边的实现是把字符串用 \r\n 拼接,也就是换行符,然后传递给 Print58 这个方法。通过计算得到代码中的字体的行高差不多是 18.x 所幸就按照每行19算,每行可以写14个汉字,所以也要注意每行的字不要超出这个范围了。
Comments | NOTHING