我有一个使用symfony的系统,并连接到(citizen ct-s2000)POS打印机。
我目前所做的是使用树枝服务渲染字符串以发送到打印机:
$this->templatingService->render('SamPosBundle:Ticket:template1.html.twig', array('order' => $order))
然后使用fwrite将其发送到打印机,之后我将纸张送入1行并使用以下方式剪切纸张:
fwrite($handle, chr(hexdec('0A')));
fwrite($handle, chr(hexdec('1B')).chr(hexdec('69')));
然而,这一切都像是一种魅力。
现在我正在寻找一种从树枝模板中发送转义码的方法
这样我就可以使用代码加下划线等,最后从树枝模板中剪切纸张。
我确定这将涉及一个枝条扩展来创建一个额外的过滤器,我知道如何制作,我只是不知道它应该做什么或如何去从twig转换为转义代码将被拾取通过fwrite
我一直在寻找2天,而且我似乎无法自己解决这个问题。所以任何帮助都会非常感激。
如果我的问题不够明确,请告诉我。
答案 0 :(得分:2)
配置您的树枝扩展名:
services:
your.twig.pos_printer_extension:
class: Your\CustomBundle\Twig\POSPrinterExtension
tags:
- { name: twig.extension }
创建您的扩展程序:
<?php
namespace Your\CustomBundle\Twig;
class POSPrinterExtension extends \Twig_Extension
{
public function getGlobals()
{
return [
'some_constant' => chr(hexdec('0A'))
];
}
public function getFilters()
{
return [
'bold' => new \Twig_Filter_Method($this, 'bold')
];
}
public function bold($text)
{
return chr(hexdec('0B')) . $text . chr(hexdec('0A'));
}
}
最后在你的树枝模板中使用它:
{{ some_constant }}
{{ receipt.amount | bold }}
您也可以将过滤器应用于entire block:
{% filter bold %}
Dear {{ name }},
{% endfilter %}
显然,我不知道正确的逃脱角色,但你明白了吗?
更新(我写这篇文章以避免贬值)
我的示例是使用自{1.1}以来弃用的Twig_Filter_Method
(要在2.0中删除),您应该使用Twig_SimpleFilter
。
答案 1 :(得分:1)
它活着,只是getFilters()
的语法略有不同:
public function getGlobals()
{
return [
'ticket_cut' => chr(hexdec('1B')).chr(hexdec('69'))
];
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('ticketBold', array($this, 'ticketBold')),
);
}
public function ticketBold($string)
{
return chr(hexdec('1B')).chr(hexdec('45'))."1".$string.chr(hexdec('1B')).chr(hexdec('45'))."0";
}
指示我指向正确的方向!