Generates pdf files without any dependencies. Includes a layout engine to handle flow content (e.g. text spanning over more than one page).
composer require famoser/pdf-generator
This is still under active development (contributions welcome!), and the public API is subject to change. If you are looking for a more mature project, see https://github.com/tecnickcom/TCPDF.
Using the printer:
// places "Hello world" in the top-left corner of the document.
$document = new Document();
$printer = $document->createPrinter();
$bodyText = new TextStyle(Font::createFromDefault());
$printer->printText('Hello world', $bodyText);
file_put_contents('example.pdf', $document->save());
The printer is useful when the exact position of elements is known. For example, for correspondence with fixed layout (e.g. the address in a letter) or for documents with page numbers. However, for many elements (such as tables) determining the exact position is cumbersome. For this, layouts are provided.
Using layouts:
// adds a rectangle, followed by "Hello moon".
// placement is decided by Flow, which places elements one-after-the-other.
$flow = new Flow();
$rectangle = new Rectangle(width: 120, height: 80, style: new DrawingStyle());
$flow->addContent($rectangle);
$text = new Text();
$text->addSpan('Hello moon', $bodyText);
$flow->add($text);
$document->add($flow);
file_put_contents('example.pdf', $document->save());
The layouts allow to declare what needs to be printed, and then takes care of the where. Provided are flows, grids, tables and text.