

对接飞蛾云打印小票接口,我们发现打印出来的小票商品列表入上所示,会有错位,我们可以用下面代码实现:
/**
* 统计字符串字节数补空格,实现左中右排版对齐
* @param string $str_left 左边字符串
* @param string $str_centre 中间字符串
* @param string $str_right 右边字符串
* @param int $length 输入当前纸张规格一行所支持的最大字母数量:58mm的机器,一行打印16个汉字,32个字母;76mm的机器,一行打印22个汉字,33个字母,80mm的机器,一行打印24个汉字,48个字母;标签机宽度50mm,一行32个字母,宽度40mm,一行26个字母
* @return string 返回处理结果字符串
*/
protected function LR($str_left, $str_centre, $str_right, $length)
{
if (empty($str_left) || empty($str_right) || empty($length)) return '请输入正确的参数';
$left_space_k = '';
$right_space_k = '';
$str_left_lenght = strlen(iconv("UTF-8", "GBK//IGNORE", $str_left));
$str_centre_lenght = strlen(iconv("UTF-8", "GBK//IGNORE", $str_centre));
$str_right_lenght = strlen(iconv("UTF-8", "GBK//IGNORE", $str_right));
$left_space = 20 - ($str_left_lenght + $str_centre_lenght); //左边+中间+空格总长度21,计算剩余空格长度
$right_space = 14 - ($str_right_lenght + $str_centre_lenght); //左边+中间+空格总长度21,计算剩余空格长度
$k = $length - ($str_left_lenght + $str_centre_lenght + $str_right_lenght); //纸张长度 - 左中右总和
for ($left = 0; $left < $left_space; $left++) {
$left_space_k .= ' ';
}
for ($right = 0; $right < $right_space; $right++) {
$right_space_k .= ' ';
}
return $str_left . $left_space_k . $str_centre . $right_space_k . $str_right;
}
$this->LR('商品名称','x1','10.00',58);
在小品商品列表处调用LR函数后,可实现下面的结果: