How To

How to Generate and Save Invoice PDF Automatically in Magento 2?

Hello, Magento mates. 🤗

Welcome to the MageComp Magento tutorials.

Today, in this tutorial, we will learn to generate an invoice PDF automatically and save the invoice to the server once the invoice is created.

What is an Invoice PDF?

An invoice PDF is a digital document typically generated by businesses to formalize and communicate financial transactions with their customers.

Invoices typically include crucial information such as the seller’s and buyer’s details, a unique invoice number, itemized descriptions of products or services, quantities, unit prices, and the total amount due. It also serves as a detailed record of goods or services provided, their corresponding costs, and any applicable taxes or fees.

The use of PDF format ensures that the document retains its intended formatting and can be easily viewed and printed across different devices and platforms. In essence, an invoice PDF is a professional and organized way to request payment for goods or services rendered.

Steps to Generate and Save Invoice PDF

Step 1 – 

First, we need to create an “events.xml” file inside our extension at the following path.

app\code\Vendor\Extension\etc\events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
  <event name="sales_order_invoice_register">
    <observer name="yourObserverName" instance="Vendor\Extension\Observer\CustomObserver" />
  </event>
</config>

Step 2 –

After creating the file and entering the code mentioned above, we need to create a “CustomObserver.php” file inside our extension at the following path.

app\code\Vendor\Extension\Observer\CustomObserver.php

And add the code as given below

<?php
namespace Vendor\Extension\Observer;

use Magento\Framework\Event\ObserverInterface;

class CustomObserver implements ObserverInterface
{
    protected $_pdfInvoiceModel;
    protected $_outputDirectory;
    private $_myPdfStorageSubDirectory = "pdfinvoices";

    public function __construct(
        \Magento\Sales\Model\Order\Pdf\Invoice $pdfInvoiceModel,
        \Magento\Framework\Filesystem $filesystem
        ) {
            $this->_pdfInvoiceModel = $pdfInvoiceModel;
            $this->_outputDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        try{
            $order = $observer->getData('order');
            if (!$order->hasInvoices()){
               return $this;
            }
            $invoice =  $order->getInvoiceCollection()->getFirstItem();
            $pdfContent = $this->_pdfInvoiceModel->getPdf([$invoice])->render();
            //invoice pdf file created under var directory with IncrementId.pdf file name.
            $this->_outputDirectory->writeFile($this->_myPdfStorageSubDirectory. "/" . $invoice->getIncrementId() . ".pdf" ,$pdfContent);
        } catch (Exception $e){
            
        }
        return $this;
    }
}
?>

Step 3 – 

After completing the task of entering the code, you have to run the commands mentioned below:

php bin/magento setup:di:compile
php bin/magento cache:flush

Conclusion

Code coded smoothly. 🙌

The implementation of an automated system for generating and saving invoice PDFs brings significant efficiency and accuracy to the invoicing process. By harnessing Magento technology to streamline these tasks, businesses can minimize errors, reduce manual workload, and expedite the overall invoicing cycle.

With this code, you can automatically generate and save the invoice PDF into your Magento 2 store. Hope you found this tutorial helpful and easy. If you still have any problems with this tutorial, feel free to contact us anytime you want, our experienced Magento developers are always available at your service.

Happy Coding!!!

Click to rate this post!
[Total: 0 Average: 0]
Dhiren Vasoya

Dhiren Vasoya is a Director and Co-founder at MageComp, Passionate 🎖️ Certified Magento Developer👨‍💻. He has more than 9 years of experience in Magento Development and completed 850+ projects to solve the most important E-commerce challenges. He is fond❤️ of coding and if he is not busy developing then you can find him at the cricket ground, hitting boundaries.🏏

Recent Posts

Mastering Tailwind CSS in Laravel: A Comprehensive Guide

Tailwind CSS has emerged as a powerful utility-first CSS framework, offering developers a unique approach…

1 day ago

React Native or Flutter in 2024

The mobile app development field has witnessed a rapid revolution over the past few years.…

3 days ago

Magento 2: How To Call JS on the Checkout Page?

Hello Magento mates, Today we will learn to add a call JS on the checkout…

6 days ago

Boost Your SEM Game: Unveiling the Top 10 Tools for Marketers in 2024

Business survival in today’s digital world has become extremely difficult. Using traditional marketing techniques is…

1 week ago

Five Essential Payroll Compliance Tips for eCommerce Startups

Are you setting up a payroll system for your eCommerce startup? Ensuring compliance with myriad…

1 week ago

Optimizing Laravel Blade: Unlocking Advanced Fetcher Techniques

In the expansive universe of Laravel development, Blade serves as the stellar templating engine, propelling…

1 week ago