Different page sizes in one document - php

I use DOMPDF to create a PDF document. It works well but the document has 4 pages, all are size of A4.
For example:
Page 1 = Intro
Page 2 = Big table with alot of information
Page 3 = Outro
Page 4 = Logo
For pages 1,3 and 4 the A4 size is good. For page 2 I want to change the page size to A3.
I hope someone can help me out.

Dompdf does not yet support this type of functionality. To achieve something like this you would need to render each segment separately with Dompdf then combine them using an external library such as libmergepdf (or some other method).
This, of course, assumes you can easily break your document into separate HTML files.
Some (pseudo-ish) code:
<?php
use Dompdf\Dompdf;
use iio\libmergepdf\Merger;
use iio\libmergepdf\Pages;
$dompdf = new Dompdf();
$dompdf->loadHtml("a4section.html");
$dompdf->setPaper("a4");
$dompdf->render();
file_put_contents('a4section.pdf', $dompdf->output());
unset($dompdf);
$dompdf = new Dompdf();
$dompdf->loadHtml("a3section.html");
$dompdf->setPaper("a3");
$dompdf->render();
file_put_contents('a3section.pdf', $dompdf->output());
$merger = new Merger;
$merger->addIterator(['a4section.pdf', 'a4section.pdf']);
$createdPdf = $merger->merge();
?>
There's a related enhancement request for this type of functionality using a single HTML document, but no timeline for implementation. See https://github.com/dompdf/dompdf/issues/498

Related

DOMPDF change the html elements places

I am working with laravael,I have an HTML view that has CSS integrated. I want to convert into a PDF. If I open the view (it doesn't mather if I open it via my Documents or by a link in my app) it works fine, everything looks ok. But if I get that file and generate a PDF with dompdf, when I open it the css for the background and the images are in their places but the texts change places and have another size.
Here is how I convert it to a PDF
$file = file_get_contents("../resources/views/panel/historial/pdfs/otros.html");
$dompdf = new DOMPDF();
$dompdf->loadHtml($file);
//$dompdf->load_html_file($html);
$dompdf->render();
$dompdf->stream("otros.pdf", array("Attachment" => 0));
return $dompdf;
enter image description here
I think that is not working in that way to except then the DOMPDF-Renderer has not the full CSS functionality.
https://github.com/dompdf/dompdf/wiki/CSSCompatibility
Here is a list of elements that are supported. So in your case i would suggest that you render a new template and make it with a different style for your PDF.
Another good solution is wkhtmltopdf which has a better support but is a command line tool which you have to call over php or if you don't need PHP then run it directly from your command line.
https://wkhtmltopdf.org/

dompdf not rendering properly on display:inline-block

Good Day,
I am trying to render a calendar to pdf using dompdf,
heres my html
and my php
<?php
// require .'vendor/dompdf/autoload.inc.php';
require("vendor/dompdf/autoload.inc.php");
use Dompdf\Dompdf;
// Instantiate and use the dompdf class
$dompdf = new Dompdf();
// Load HTML content
$dompdf->loadHtml($_REQUEST['html']);
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('LETTER', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
?>
the html is is good I think, just without head and html tag.
and heres the result.
can you please help me figure what wrong? the html displays fine on browser too.
Might be too late to this answer, but anyone looking for this issue, please try display: inline, it solves this issue but still need to specify width and height and not auto calculate.

Improve dompdf rendering

Here is the dompdf rendering of my SO profile page....
https://docs.google.com/file/d/0B-I8istAg8Z6UmJDVHEtUkZOUDQ/edit
here's the code
<?php
require_once("dompdf/dompdf_config.inc.php");
$html = file_get_contents('http://stackoverflow.com/users/1461078/samidh-t');
$base_path = 'http://'.$_SERVER['HTTP_HOST'] ;
$dompdf = new DOMPDF();
if ( isset($base_path) ) {
$dompdf->set_base_path($base_path);
}
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream('file.pdf' , array("Attachment" => 0));
?>
the rendering is not even close to the profile page.
What can be done to improve this rendering ?
Dompdf - from memory, renders pages ok when the css and html are simple - lots of floats do not work - and you will find rendering web pages as pdf's using dompdf difficult enless you are writing the html and css yourself. (or parsing the input files first and modifying them).
What is your overall goal?
I have used dompdf to create pdf reports of data from a database and have had success but not using 'float' or any other advances css rules.
Dompdf info on css rules it can handle are here:
From this page:
https://github.com/dompdf/dompdf/blob/master/README.md
This text:
Limitations (Known Issues) not particularly tolerant to poorly-formed HTML input (using
Tidy first may help). large files or
large tables can take a while to render CSS float is not supported
(but is in the works). If you find this project useful, please
consider making a donation.

How to create two reports in same pdf using dompdf

I am doing a site for travel agency.it has a report creation module,reports are saved in pdf format i have used dompdf for pdf creation .I need the same pdf should contain two reports .I got the two reports in same pdf but the 2nd one should starts in a new page. how could i do this?
<?php
require_once("dompdf_config.inc.php");
$html =
'<html><body>'.
'<p>Put your html here, or generate it with your favourite '.
'templating system.</p>'.
'</body></html>';
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
?>
I have used the above code but the $html variable used different.Any help will be appreciated.
You can use
style="page-break-after:always"
to create new page.
//edit full snippet of code:
<div style="page-break-after:always;">Your 2 page</div>
Call $dompdf->new_page();
Props for the Googling skills by the way.

How to generate a PDF from a portion of a Wordpress post?

A client of mine has a food blog hosted on WordPress. Each post entry contains some text and a div called "recipes" with some more text inside it. They would like to add to this div a link that generates a PDF of the recipe, dynamically, for saving or printing, as the user sees fit.
I have seen quite a few Wordpress plugins that offer the conversion of entire posts to PDF but not anything that's customizable enough to select a given portion of a post, the way we'd like to.
Any suggestions on how to do this? I'm comfortable with PHP, Javascript, CSS but am new to the various PDF libraries.
Take a look at dompdf It's pretty easy to work with :) This is from the documentation:
<?php
require_once("dompdf_config.inc.php");
$html =
'<html><body>'.
'<p>Put your html here, or generate it with your favourite '.
'templating system.</p>'.
'</body></html>';
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
If you need more control than dompdf you could always use PHP's XML/XSL methods to convert the HTML to XSL:FO and use FOP on the commandline to generate the PDF. It's a little long-winded but you get complete control of the output styling/structure, the ability to "lock" the PDF, provide metadata, etc.

Categories