Home > Web Development > Laravel Tutorials > How to easily add graphics to PDF in Laravel 11

How to easily add graphics to PDF in Laravel 11

Diego Cortés
Diego Cortés
January 20, 2025
How to easily add graphics to PDF in Laravel 11

In the world of web development, generating documents in PDF format is a common practice, especially when there is a need to present information visually and clearly. In this opportunity, we will explore how to integrate graphics into PDF files using Laravel 11, one of the most popular platforms for developing web applications in PHP. Below, we will provide you with a step-by-step guide to achieve this simply and effectively.

Table of Contents

Prerequisites

Before beginning the process of generating PDFs with graphics in Laravel 11, it is important to ensure that you have some elements set up and ready. Here’s a list of what you will need:

  1. Installation of Laravel 11: Make sure you have the latest version of Laravel installed. You can do this using Composer.
  2. Required Libraries: You will need to install the html2canvas and jspdf libraries, which will facilitate the creation of graphics within the PDF.
  3. JavaScript: You should have basic knowledge of JavaScript, as the mentioned libraries work in this language.

Library Installation

To add html2canvas and jspdf to your Laravel project, first open your terminal and run the following command:

npm install html2canvas jspdf

This will allow your project to access these essential tools for generating graphics.

Creating Graphics in HTML

Next, it's necessary to develop the graphics you want to include in the PDF. You can do this using libraries like Chart.js or simply HTML and CSS for simpler graphics. Make sure the chart is rendered in a div element that will later be captured by html2canvas.

Here’s a simple example of a chart using Chart.js:

<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255, 99, 132, 1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            y: {
                beginAtZero: true
            }
        }
    }
});
</script>

PDF Generation

With the chart now created, the last step is to capture it and generate the PDF. This is where html2canvas comes into play. Use the following JavaScript code to take a snapshot of the chart and generate it into a PDF:

function generatePDF() {
    html2canvas(document.getElementById('myChart')).then(function(canvas) {
        var imgData = canvas.toDataURL('image/png');
        var pdf = new jsPDF();
        pdf.addImage(imgData, 'PNG', 10, 10);
        pdf.save("chart.pdf");
    });
}

Make sure to call the generatePDF() function on the event you desire, such as a "Download PDF" button.

Conclusion

Integrating graphics into PDF files using Laravel 11 may seem complicated, but by following these steps, you can achieve it effectively. You will now be able to generate reports that include visually appealing charts filled with valuable information.

I invite you to keep exploring more articles like this on my blog, where you will find guides and useful tools to enhance your Laravel projects and other web development topics. Don’t miss out!

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categories

Page loaded in 31.39 ms