Search code examples
phpjquerypdffpdf

Is it possible to render PDF (fPDF) via a javascript?


So, I'm passing some values via jQuery to the server, which generates PDF garble. It goes something like this:

$.post('/admin/printBatch',
data, // Some vars and such
function(data){
    if(data) {

        var batch =  window.open('','Batch Print','width=600,height=600,location=_newtab');
        var html = data; // Perhaps some header info here?!
        batch.document.open();
        batch.document.write(html);
        batch.document.close();

        $( this ).dialog( "close" ); // jQuery UI
    } else {
        alert("Something went wrong, dawg.");
    }
    return false;
});

The output file looks roughly like so:

$pdf->AddPage(null, null, 'A PDF Page');
//....
$pdf->Output('', 'I'); // 'I' sends the file inline to the browser (http://fpdf.org/en/doc/output.htm)

What gets rendered to the browser window:

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream ...

I'm missing something major, I just know it... thoughts?

Thanks, guys.


Solution

  • By the looks of things, the PDF is reasonably well formed. As such, I suspect you simply need to set the appropriate content header when you're outputting the PDF via PHP using the header function:

    header('Content-type: application/pdf');
    

    N.B.: This must be the first output from the PHP - it won't work if there's preceding HTML, blank space, etc.

    In an ideal world, you'd also set the content length, etc. via...

    header('Content-Length: '.filesize($pathToYourPDF));
    

    ...or...

    header('Content-Length: '.strlen($pdfData));
    

    ...if you're generating the PDF programmatically.

    UPDATE

    To clarify, I suspect you'll need to change your window.open to read the above directly from a PHP served URL for the above to work. (Not quite sure why you're not just doing this in the first place, but I guess there's a good reason.)