Skip to content

famoser/pdf-generator

Repository files navigation

pdf-generator

MIT licensed PHP Composer

About

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.

Getting started

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.

Examples

Invoice

Code | .pdf

Invoice

Book

Code | .pdf

Book page 1 Book page 2
Book page 3 Book page 4