Hai bisogno di mostrare a video o in un allegato pdf un codice a barre? Se hai sviluppato la tua webapp utilizzando il framework Symfony ti posso dare una dritta.
Io ho risolto utilizzando il bundle BarcodeBundle, che non è altro che il fork per Symfony della libreria open source PHP-Barcode.
Innanzi tutto dobbiamo installare nel server l’unix-commandline tool denominato genbarcode che si interfaccia con GNU-Barcode. Ah, per inciso io porto come esempio l’installazione sul mio Debian, ma se la tua installazione è diversa devi apportare le opportune modifiche.
wget http://www.ashberg.de/php-barcode/download/files/genbarcode-0.4.tar.gz tar -xzvf genbarcode-0.4.tar.gz cd genbarcode-0.4 make install
A questo punto aggiungiamo HackzillaBarcodeBundle nel nostro composer.json
:
{ "require": { "hackzilla/barcode-bundle": "~1.0" } }
E poi lo registriamo in AppKernel.php
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Hackzilla\BarcodeBundle\HackzillaBarcodeBundle(), ); }
A questo punto io per comodità ho modificato il DefaultController.php
aggiungendo l’azione barcodeImageAction($code)
però volendo si può creare un controller ad hoc:
namespace Acme\DemoBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; use Hackzilla\BarcodeBundle\Utility\Barcode; class DefaultController extends Controller { /** * Display code as a png image */ public function barcodeImageAction($code) { $barcode = new Barcode(); $barcode->setMode(Barcode::MODE_PNG); $barcode->setGenbarcodeLocation('/usr/local/bin/genbarcode'); $headers = array( 'Content-Type' => 'image/png', 'Content-Disposition' => 'inline; filename="'.$code.'.png"' ); return new Response($barcode->outputImage($code), 200, $headers); } }
Se genbarcode non è installato in /usr/local/bin
è necessario richiamare setGenbarcodeLocation()
dichiarando il path corretto. Se invece l’installazione è standard nella cartella di default la dichiarazione $barcode->setGenbarcodeLocation('/usr/local/bin/genbarcode');
si può omettere tranquillamente.
Poi in src/Acme/DemoBundle/Resources/config/routing.yml
aggiungo:
barcode_image: path: /barcode-image/{code} defaults: { _controller: AcmeHelloBundle:Default:barcodeImage }
Ultimo step, nel template Twig richiamo il tag html:
<img src="{{ path('barcode_image', {'code':'ilmiocodicequi123456789'}) }}">
Se tutto va per il verso giusto dovremmo ottenere questo: