I want to use dompdf in my php website and I try to include the library without Composer and I can not get it to work.
The code I try to test is:
<?php
include "../../plugins/dompdf/Autoloader.php";
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
?>
But i get the error:
Fatal error: Class 'Dompdf' not found ...
Can anyone explain me how to include the library without install composer in the server?
Thank You.
With the right include is working like a charm, as said Samrap i was including the wrong file.
Now the code is:
<?php
//Configure the directory where you have the dompdf
require_once "../../plugins/dompdf/autoload.inc.php";
use Dompdf\Dompdf;
//$dompdf = new dompdf();
//$dompdf = new DOMPDF();
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
?>
Thank you Samrap for your help.
You're requiring the wrong autoload file. The docs clearly state to include this file for autoloading:
require_once 'dompdf/autoload.inc.php';
If you look at that file, you'll see it does require Autoloader.php but performs a few other bootstrapping tasks as well.
I am using DomPDF with PDFLib as backend.
Recently I am trying to upgrade my application to use dompdf from 0.6.0 to 0.7.0.
But it is giving exception in following file :
https://github.com/dompdf/dompdf/tree/master/src/Adapter/PDFLib.php#L213
$families = $dompdf->getFontMetrics->getFontFamilies();
Exception :
[Dompdf\Exception, 0]
Invalid property: getFontMetrics
Can anyone let me know what is this error about ?
Below is the sample php script that I am trying to run :
<?php
require_once('dompdf/autoload.inc.php');
// reference the Dompdf namespace
use Dompdf\Dompdf;
use Dompdf\Options;
$options = new Options();
$options->set(array(
'pdfBackend'=>'PDFLib',
'defaultMediaType'=>'print',
'defaultPaperSize'=>'A4',
'defaultFont'=>'arial',
'enable_html5_parser'=>true,
'enable_font_subsetting'=>true
));
// instantiate and use the dompdf class
$dompdf = new Dompdf($options);
$dompdf->loadHtml('hello world');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
There are some bugs in 0.7.0 with regard to PDFLib. The next release should address those issues (commit 3fd379b addresses this particular issue). No release date is currently set, though I would expect to see it by this fall.
Relevant discussion is in issue #1222.
I need your help to fix this:
My current code is this:
<?php
require_once '../dompdf/autoload.inc.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$html = 'Insert full HTML content';
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream("codexworld",array("Attachment"=>0));
?>
This is the error a get:
Why if I have exactly the same code like the basic example, am I getting this error? What am I missing? I don't find in my folder the Autoloader.php, where do I have to get that file?
Well apparently it's an issue after domPdf has moved to Github. It seems that php-font-lib library doesn't exist. So one solution is to manually download it:
Go to https://github.com/PhenX/php-font-lib and download the library.
In the zip file, take the contents of the src/FontLib/ folder and paste that into the folder lib/php-font-lib.
or you can check this answer here
require_once("function/dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
foreach($modules as $module){
$output = "Hello " .$module['name'];
$dompdf->load_html($output);
$dompdf->render();
$output_pdf = $dompdf->output();
file_put_contents($dir . $name_modulo . ".pdf", $output_pdf);
}
Fatal error: Uncaught exception 'DOMPDF_Exception' with message 'No block-level parent found. Not good.'
Late to this thread, but based on the post at https://github.com/dompdf/dompdf/issues/902, I was able to fix this issue by removing spaces between <html><head>, </head><body>, and </body></html>
So, instead of having properly formated html code like this:
<html>
<head>
...
</head>
<body>
...
</body>
</html>
I deleted all the new lines or spaces between the tags, now it looks like this :
<html><head>
...
</head><body>
...
</body></html>
And everything is hunky-dory again
dompdf folder > dompdf_config.custom.inc.php file > try to uncomment the line
define("DOMPDF_ENABLE_HTML5PARSER", true);
Also replace unsupported html5 tags & attributes with supported one, clear html errors for better result
Just define
$dompdf->set_option('enable_html5_parser', TRUE);
I think it will fix the issue.
Or can edit the dompdf/dompdf_config.inc.php file
go to line no 322
change
def("DOMPDF_ENABLE_HTML5PARSER", false);
to
def("DOMPDF_ENABLE_HTML5PARSER", true);
go to configuration file dompdf_config.custom.inc.php and uncomment define("DOMPDF_ENABLE_HTML5PARSER", true); and check, basically it requires html5 parser enabled in your configuration file.
Just uncomment define("DOMPDF_ENABLE_HTML5PARSER", true); this line from dompdf_config.custom.inc.php this file.
You can find this file for codeigniter in vendor/dompdf/dompdf this directory.
If you have installed dompdf using composer require then defining the enable_html5_parser option using the set_option method works well if you don't want to modify the vendor folder
So add the following to each document that is creating an error
$dompdf->set_option('enable_html5_parser', TRUE);
For newer versions of Dompdf you can use this to enable the HTML5 parser:
use Dompdf\Options;
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$dompdf = new Dompdf($options);
I don't know why the answer regarding ("DOMPDF_ENABLE_HTML5PARSER", true) was voted down either. Because I spent over 30 hours trying to figure out why this was happening in my website, until I came across this solution. So I enabled the "DOMPDF_ENABLE_HTML5PARSER" by setting it to "TRUE" as noted above. And immediately the error regarding "No block-level parent found" was resolved and my scripts worked. Maybe the 2nd answer was voted down because it duplicated a previous answer (but cut a guy a break, why don't you? Maybe he didn't see it..). Or maybe the "downvoter" has an attitude problem.
I had the same problem with domPDF 0.8.3 on PHP 5.6 and I couldn't find neither dompdf_config.custom.inc.php nor dompdf_config.inc.php and didnĀ“t work either; to solve my problem, I added body {display:block;} to my CSS and had not further problem.
I tried locating the white space or other spaces. didn't succeed, so
I just Minimized the HTML file that is a PDF template
it removed all the spaces, white spaces, etc
worked for me
You can enable the HTML5 parser as mentioned above or you can update the dompdf library. I found updating the dompdf library from 6.2 to 8.2 got past this error BUT if you are using Drupal like I am there's a little bit of trickery you have to do to get Drupal to recognize the newer version of the library (see here: https://www.drupal.org/project/print/issues/3010637 )
In my case, it is a bit different.
The pdf creation code was in the loop but the dom pdf object creation was above the loop. So when it is trying to create the pdf for the second time, I had seen the above error. To resolve it, each and every time I am creating a new object and it worked as expected.
Example:
(Code not working)
//Reference of Dompdf namespace
use Dompdf\Dompdf;
use Dompdf\Options;
//instantiate and use the Options class
$options = new Options();
$options->set('enable_html5_parser', true);
$dompdf = new Dompdf($options);
for($i = 0; $i < $count; $i++) {
//Create PDF
$dompdf->loadHtml($form_data);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$output = $dompdf->output();
file_put_contents($pdf_file_name, $output);
}
Working Code:
//Reference of Dompdf namespace
use Dompdf\Dompdf;
use Dompdf\Options;
//instantiate and use the Options class
$options = new Options();
$options->set('enable_html5_parser', true);
for($i = 0; $i < $count; $i++) {
$dompdf = new Dompdf($options);
//Create PDF
$dompdf->loadHtml($form_data);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$output = $dompdf->output();
file_put_contents($pdf_file_name, $output);
}
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...
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.
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.
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.
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");
?>