how to convert dynamic php file to pdf?

2019-04-02 19:02发布

问题:

I try to convert dynamic php database file to pdf. I try with DOMPDF, but I have a problem with defining the string. I'll explain:

Here is a 'hello world' script for dompdf:

require_once("dompdf_config.inc.php");
$html =
    '<html><body>'.
    '<p>Hello World!</p>'.
    '</body></html>';
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("hello_world.pdf");

The thing is that instead of a simple

'<html><body>'.
'<p>Hello World!</p>'.
'</body></html>' 

I have a long php file full of functions and sql queries. because of it I have inside it many ",',; e.t.c signs. I also have a javascript dynamic chart (jqplot) in this page.

So instead of pdf file I get errors errors errors...

Does anyone has a solution for this?

I will really appreciate any answer, and will be really really thankful for a solution...

回答1:

First you'll need to generate HTML from your PHP, then pass it to DOMPDF:

<?php
    require_once("dompdf_config.inc.php");
    ob_start();
    require_once("path/to/input/file.php");
    $dompdf = new DOMPDF();
    $dompdf->load_html(ob_get_clean());
    $dompdf->render();
    $dompdf->stream("file.pdf");
?>

You can also do a regular HTTP request:

<?php
    require_once("dompdf_config.inc.php");
    $dompdf = new DOMPDF();
    $dompdf->load_html_file('http://example.com/file.php');        
    $dompdf->render();
    $dompdf->stream("file.pdf");
?>    

If you need JavaScript support, try wkhtmltopdf, it's based on Webkit and does it's work perfectly.



回答2:

You can use ob_start and ob_get_contents to run PHP code and capture the output as a string.

For the JavaScript chart, though, you're out of luck. DOMPDF is pretty smart, but it's not that smart. You'll need to either use a non-JavaScript chart solution, do without the charts, or use a web browser to generate the PDF.



回答3:

I am not sure why you need to generate HTML to build a PDF in the first place but as others have suggested, build out your PHP script and then use something like FPDF or TCPDF.

They both build PDFs just fine and can take HTML input.



回答4:

Try This ...

<?php
    ob_start();

    require_once("dompdf_config.inc.php");

    $file = file_get_contents('http://example.com/file.php');

    $dompdf = new DOMPDF();
    $dompdf->load_html($file);
    $dompdf->render();
    $dompdf->stream("filename.pdf");
?>