We sacrifice by not doing any other technology, so that you get the best of Magento.

We sacrifice by not doing any other technology, so that you get the best of Magento.

    There are so many third party libraries or extensions that are available for generating/tracking barcodes.

    Today I’m going to share with you that how we can easily add unique barcodes in our pdf using Magento default Zend library.

    First, you have to create [Vendor Name]/[Module Name]/etc/di.xml in your existing module or create a new module and add the below code:

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
        <type name="MagentoSalesModelOrderPdfInvoice">
            <plugin name="barcodes_pdf_invoice" type="[Vendor Name][Module Name]PluginInvoice" sortOrder="10" />
        </type>
    </config>

    Then you have to create a plugin file [Vendor Name][Module Name]PluginInvoice.php and add the below code:

    <?php
    
    namespace [Vendor Name][Module Name]Plugin;
    
    use MagentoFrameworkAppConfigScopeConfigInterface;
    
    class Invoice
    {
         /**
         * Configuration barcode enable XML path
         */
        const XML_PATH_BARCODES_ENABLED = 'barcodes/general/eb_barcodes_active';
        /**
         * @var ScopeConfigInterface
         */
        private $scopeConfig;
        
        public function __construct(
            ScopeConfigInterface $scopeConfig
        ) {
            $this->scopeConfig = $scopeConfig;
        }
        
        public function beforeInsertDocumentNumber($subject, $page, $text)
        {
            if ($this->scopeConfig->isSetFlag(self::XML_PATH_BARCODES_ENABLED)) { //Here you will check your custom condition like enable/disable
                $docHeader = $subject->getDocHeaderCoordinates();
                $image = $this->generateBarcode($text);
                $page->drawImage($image, $docHeader[2] - 150, $docHeader[1] + 5, $docHeader[2] + 8, $docHeader[1] +50); //You will adjust barcode image place or height/width as per your requirement
            }
        }
    
        protected function generateBarcode($text)
        {
            $config = new Zend_Config([
                'barcode' => 'code128',
                'barcodeParams' => [
                    'text' => $this->extractInvoiceNumber($text),
                    'drawText' => true
                ],
                'renderer' => 'image',
                'rendererParams' => ['imageType' => 'png']
            ]);
            $barcodeResource = ZendBarcodeBarcode::factory($config)->draw();
            ob_start();
            imagepng($barcodeResource);
            $barcodeImage = ob_get_clean();
            $image = new Zend_Pdf_Resource_Image_Png('data:image/png;base64,' . base64_encode($barcodeImage));
            return $image;
        }
    
        protected function extractInvoiceNumber($text)
        {
            $array_of_words = explode("#", $text);
            return $array_of_words[1];
        }
    }
    

    After creating both files run php bin/magento cache:flush and see any invoice pdf barcodes are printed as below.

    field_5bfb909c5ccae

      Get a Free Quote