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.
If you want to show the different contents for Mobile...
Please follow the below methods to get the attribute options...
Update product attribute value programmatically in Magento 2 . [crayon-6287816b58315873970470/]...
If you want restrict customer to checkout based on your...
Sometime we need to set html data without load or...