从symfony中的twig输出打印机ESC代码

时间:2014-03-22 12:31:00

标签: php symfony printing twig

我有一个使用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天,而且我似乎无法自己解决这个问题。所以任何帮助都会非常感激。

如果我的问题不够明确,请告诉我。

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";

}

指示我指向正确的方向!