Demos | PHP & MySQL | Tutorials

David Carr

Create PDF with form data

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

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>

 

Domains are often purchased from multiple providers, keeping track of where a domain is and its DNS settings can be tricky. Domain Mapper solves this by listing all your domains in one place. View your DNS settings and receive reminders to renew your domains. Try it today.

Support my work by donating with PayPal.

Subscribe to my newsletter

Subscribe and get my books and product announcements.

© 2009 - 2021 DC Blog. All code MIT license. All rights reserved.