【问题标题】:output printer ESC codes from twig in Symfony在 Symfony 中从树枝输出打印机 ESC 代码
【发布时间】:2014-03-22 12:31:00
【问题描述】:

我有一个使用 Symfony 的系统,并连接到(citizen ct-s2000)POS 打印机。

我目前所做的是使用 twig 服务渲染要发送到打印机的字符串:

$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')));

然而,这一切都像一个魅力。

现在我正在寻找一种从树枝模板内发送转义码的方法

这样我就可以使用代码来下划线等,最后从树枝模板内部剪纸。

我确信这将涉及一个树枝扩展来创建一个额外的过滤器,我知道如何制作,我只是不知道它到底应该做什么或如何进行从树枝到转义代码的转换会被 fwrite 拾取

我一直在寻找 2 天,但我似乎无法自己解决这个问题,因此非常感谢任何帮助。

【问题讨论】:

    标签: php symfony printing twig


    【解决方案1】:

    配置你的树枝扩展:

    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 %}
    

    显然我不知道正确的转义字符,但你的想法对吗?

    更新(我写这个是为了避免投票)

    我的例子是使用Twig_Filter_Method,自 1.12 起已弃用(将在 2.0 中删除),您应该改用 Twig_SimpleFilter

    【讨论】:

    • 太棒了,我今天将对此进行测试。我会尽快更新。提前谢谢。
    【解决方案2】:

    它还活着,只是 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";
    
    }
    

    感谢您为我指明了正确的方向!

    【讨论】:

    • 哦,我需要更新我的 Twig 扩展以使用 Twig_SimpleFilter...抱歉!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2014-06-27
    • 2018-10-14
    • 1970-01-01
    • 2014-08-25
    • 2022-12-28
    • 1970-01-01
    相关资源
    最近更新 更多