所以我从我们的网络服务器(也在办公室)打印到办公室联网的热敏打印机上,这样客户就可以在网站上下订单,然后订单就会出现在销售部门的办公桌上。这是我使用的代码,它工作得很好。然而,当要在滑动条上打印项目时,我希望项目文本居中对齐,价格文本右对齐,但它不允许我这样做(因为我认为它是同一行),所以我怎么能说新行(n),然后反转它。我已经尝试了 33F和F,但没有运气。任何建议吗?
$texttoprint = "";
//center,bold,underline - close underline, close bold
$texttoprint .= "x1bx61x01x1bx45x01x1bx2dx02x1bx21x10x1bx21x20 Company name x1bx2dx00x1bx45x00";
$texttoprint .= "n";
//normal text
$texttoprint .= "x1bx21x00 Address";
$texttoprint .= "n";
//normal text
$texttoprint .= "x1bx21x00 Adress2";
$texttoprint .= "n";
//normal text
$texttoprint .= "x1bx21x00 Tel : ...";
$texttoprint .= "n";
$texttoprint .= "n";
//normal text
$texttoprint .= "x1bx21x00 Website order";
$texttoprint .= "n";
$texttoprint .= "n";
//center,bold,underline - close underline, close bold
$texttoprint .= "x1bx61x01x1bx45x01x1bx2dx02x1bx21x10x1bx21x20 Tax Invoice x1bx2dx00x1bx45x00";
$texttoprint .= "n";
$texttoprint .= "n";
//align center, normal text
$texttoprint .= "x1bx61x01x1bx21x00 1x product";
//align right, normal text
$texttoprint .= "x1bx61x02x1bx21x00 $200";
...
正如你在这里看到的最后两个是在同一条线上,我试图证明产品中心和价格正确。它们都在中间,如果我在中间放一个/n,它们就会在错误的行上正确对齐。
$texttoprint = stripslashes($texttoprint);
$fp = fsockopen("192.168.0.168", 9100, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)<br />n";
} else {
fwrite($fp, " 33100");
$out = $texttoprint . "rn";
fwrite($fp, $out);
fwrite($fp, " 12 12 12 12 12 12 12 12 12 33151 10 04 01");
fclose($fp);
}
您可以让打印机完成所有的工作,但是我认为在输出例程中实现一些关于打印机特性的知识是一个更好的主意。你应该知道每行可以打印多少个字符。
然后,您可以使用sprintf()
来格式化整行,产品信息对齐到左侧,并具有最大字段大小,价格对齐到右侧。
$texttoprint .= sprintf('%s %f', $article, $price); // very basic start: A string and a float
$texttoprint .= sprintf('%-30.30s %8.2f', $article, $price);
// 30 chars for the string, will not exceed this length, and 8 chars for the price, with decimal dot and 2 decimal digits.
请注意,您不应该在最终结果上使用stripslashes()
。如果你对斜杠的存在有疑问,它们是由"魔法引号"引入的,应该在开头而不是结尾消除。
另一种解决方案是将打印机切换到"Windows"模式,并使他需要CR/LF进行完整的行打印输出。通过这种方式,您可以打印整行,而无需通过只打印CR来移动纸张,这将打印机头再次移动到该行的开头。然后可以在已经打印的行上再次打印,直到打印LF。请注意,如果涉及到一个实际的打印机头,这可能会使事情变得更糟,因为它可能会触发额外的头运动,只是为了打印一行。打印机通常能够为一行接着一行优化头部运动。