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:
1 2 3 4 5 6 |
<?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="Magento\Sales\Model\Order\Pdf\Invoice"> <plugin name="barcodes_pdf_invoice" type="[Vendor Name]\[Module Name]\Plugin\Invoice" sortOrder="10" /> </type> </config> |
Then you have to create a plugin file [Vendor Name]\[Module Name]\Plugin\Invoice.php and add the below code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<?php namespace [Vendor Name]\[Module Name]\Plugin; use Magento\Framework\App\Config\ScopeConfigInterface; 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 = \Zend\Barcode\Barcode::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.
[crayon-63d9850ce7463649723323/] Using above fucntion Images can be imported directly from...
Override view block using di.xml and add the below code...
You can check a list of called layout XML for...
Follow the below steps to install and set up PWA...
If you want to remove all leading zero's from order,...
Let our Magento expert connect to discuss your requirement.
We offer Magento
certified developers.
Our Magento clientele
is 500+.
We sign NDA for the
security of your projects.
We’ve performed 100+
Magento migration projects.
Free quotation
on your project.
Three months warranty on
code developed by us.