paulka paulka - 1 year ago 196
PHP Question

Generate PDF using TCPDF on ajax call

I'm using TCPDF class to generate PDF. First I send some data in json format (jquery) then I would like to generate PDF with these data.

Could you tell me if I am right. I should generate pdf, save it on the server and then if ajax call returns success, redirect the user to this pdf. Is a good way?

I have:

url: '/pdf/fiele_to_generate_pdf.php',
type: 'POST',
contentType: "application/json; charset=utf-8",
data: $.toJSON(jsonObj),
processData: false,
dataType: 'html',
async: false,
success: function(html) {
window.location.href = '/pdf/example.pdf';

Thanks for any advice.

Edit: So I have sent a request to make the pdf via Ajax to the server, then the pdf file was generated and saved on the server. Then I have used window.location.href to redirect the user to this pdf. Everything works but I would like to avoid saving file on the server. Any ideas?

Answer Source

Ok this script will save the file and also display in the browser

the trick is in using the output method with the 'F' or 'I':

$pdf->Output("your path", 'F');  //save pdf
$pdf->Output('file.pdf', 'I'); // show pdf


class PDF extends TCPDF {
    public function Header (){                       
         $this->SetFont('dejavusans', '', 14);
         $title = utf8_encode('title');
         $subtitle = utf8_encode('sub title');

    public function Footer() {
        $this->SetFont('dejavusans', '', 8);
        $this-> Cell (0, 5, 'Pag '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'R', 0, '', 0, false, 'T', 'M');

    public static function makeHTML ($json){
        $html = '<table border="0.5" cellspacing="0" cellpadding="4">
            <th bgcolor="#DAB926" style="width:3%; text-align:left"><strong>you th</strong></th>      
        for ($i=0; $i<count($json); $i++)
            $a= $i+1; 
            $html .= '<tr>
                        <td style="width:15%; text-align:left">'.$json[$i]->Name.'</td>
        $html .= '</table>';
        return $html;           

function printReport ($json )

    $pdf = new PDF("L", PDF_UNIT, "A3",true, 'UTF-8', false);

    $pdf->SetMargins (15, 27, 15, true);
    $pdf->SetFont('dejavusans', '', 8);

    //create html
    $html = $pdf->makeHTML($json);  

    $pdf->writeHTML($html, false, false, false, false, '');

    if (!file_exists("your path"))
        mkdir("your path");

    $pdf->Output("your path", 'F');  //save pdf
    $pdf->Output('file.pdf', 'I'); // show pdf

    return true;

$json = json_decode("your json");
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download