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.


