Currently seeking new career opportunities in web development, particularly with Laravel, Hire Me

Create PDF with form data

David Carr

Demos Tutorials PHP & MySQL

It’s possible to populate a PDF using information provided by a form using the MPDF library, this tutorial will show you how.

Download source files

Demo

First here is a simple form with a couple of fields.

<form action='' method='post'>
<p><label>Name</label><br><input type='text' name='name' value=''></p> 
<p><label>Email</label><br><input type='text' name='email' value=''></p> 
<p><input type='submit' name='submit' value='Submit'></p> 
</form>

Now we have a form with a name and email address we can proccess it. Check if the form has been submitted, collect the form data, make sure it passes the validation:

<?php
if(isset($_POST['submit'])){

    //collect form data
    $name = $_POST['name'];
    $email = $_POST['email'];

    //check name is set
    if($name ==''){
        $error[] = 'Name is required';
    }

    //check for a valid email address
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
         $error[] = 'Please enter a valid email address';
    }

If the checks all pass.

//if no errors carry on
if(!isset($error)){

Next make the HTML data for the PDF, I’ve chosen to use ob_start add ob_get_clean which are build in PHP functions that start a buffer and then collect the buffer contents and returns them. This is very handy as it allows for html to be written then stored rather then displayed.

//create html of the data
ob_start();
?>

<h1>Data from form</h1>
<p>Name: <?php echo $name;?></p>
<p>Email: <?php echo $email;?></p>

<?php 
$body = ob_get_clean();

Now create the PDF, set the PDF to ignore any invalid UTF-8 data.
Next include the MDPF library. 
Create a new instance.
Write the html to the PDF
Finally output the PDF, here we have a few options:

Save the PDF on the server by giving a filename and a flag or F:

$mpdf->Output("mydata.pdf",'F');

To download the PDF instead use the flag of D:

$mpdf->Output('demo.pdf','D');

Lastly to output the PDF to the browser:

$mpdf->Output();

Here we create the PDF and offer the PDF as a download.

$body = iconv("UTF-8","UTF-8//IGNORE",$body);

include("mpdf/mpdf.php");
$mpdf=new \mPDF('c','A4','','' , 0, 0, 0, 0, 0, 0); 

//write html to PDF
$mpdf->WriteHTML($body);
 
//output pdf
$mpdf->Output('demo.pdf','D');

If the validation was not passed loop through the error array and show the errors.

//if their are errors display them
if(isset($error)){
    foreach($error as $error){
        echo "<p style='color:#ff0000'>$error</p>";
    }
}

Here is the full script:

<?php
if(isset($_POST['submit'])){

    //collect form data
    $name = $_POST['name'];
    $email = $_POST['email'];

    //check name is set
    if($name ==''){
        $error[] = 'Name is required';
    }

    //check for a valid email address
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
         $error[] = 'Please enter a valid email address';
    }

    //if no errors carry on
    if(!isset($error)){

        //create html of the data
        ob_start();
        ?>

        <h1>Data from form</h1>
        <p>Name: <?php echo $name;?></p>
        <p>Email: <?php echo $email;?></p>

        <?php 
        $body = ob_get_clean();

        $body = iconv("UTF-8","UTF-8//IGNORE",$body);

        include("mpdf/mpdf.php");
        $mpdf=new \mPDF('c','A4','','' , 0, 0, 0, 0, 0, 0); 

        //write html to PDF
        $mpdf->WriteHTML($body);
 
        //output pdf
        $mpdf->Output('demo.pdf','D');

        //open in browser
        //$mpdf->Output();

        //save to server
        //$mpdf->Output("mydata.pdf",'F');

    }
}

//if their are errors display them
if(isset($error)){
    foreach($error as $error){
        echo "<p style='color:#ff0000'>$error</p>";
    }
}
?> 

<form action='' method='post'>
<p><label>Name</label><br><input type='text' name='name' value=''></p> 
<p><label>Email</label><br><input type='text' name='email' value=''></p> 
<p><input type='submit' name='submit' value='Submit'></p> 
</form>

 

Laravel Modules Your Logo Your Logo Your Logo

Become a sponsor

Help support the blog so that I can continue creating new content!

Sponsor

My Latest Book

Modular Laravel Book - Laravel: The Modular way

Learn how to build modular applications with Laravel Find out more

Subscribe to my newsletter

Subscribe and get my books and product announcements.

Learn Laravel with Laracasts

Faster Laravel Hosting

© 2006 - 2024 DC Blog. All code MIT license. All rights reserved.