famoser / pdf-generator
a clean pdf generator without dependencies
Installs: 1 358
Dependents: 0
Suggesters: 0
Security: 0
Stars: 16
Watchers: 2
Forks: 2
Open Issues: 0
Requires
- php: >=8.2
- ext-bcmath: *
- ext-gd: *
- ext-json: *
Requires (Dev)
- famoser/agnes: ^4.2
- friendsofphp/php-cs-fixer: ^3
- mockery/mockery: ^1.2
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^9.5.4
- rector/rector: ^2
README
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.