typesetterio / typesetter
The main typesetter service for generating PDFs from Markdown for ebooks.
Fund package maintenance!
Requires
- php: ^8.3
- ext-dom: *
- ext-libxml: *
- illuminate/collections: ^10.12|^11.0|^12.0|^13.0
- illuminate/support: ^10.12|^11.0|^12.0|^13.0
- league/commonmark: ^2.4
- mpdf/mpdf: ^8.1
- spatie/commonmark-highlighter: ^3.0
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
- roave/security-advisories: dev-latest
- slevomat/coding-standard: ^8.12
- squizlabs/php_codesniffer: ^3.7
README
Typesetter
This is the Typesetter main service. This can be used in your own projects directly if you want. You probably want to head over to typesetter-cli though.
Install
This requires PHP 8.3 or above.
composer require typesetterio/typesetter
Usage
Build a Config from an array of options, then pass it to Typesetter::generate() to get a PDF binary back from MPDF.
Example:
$config = new \Typesetterio\Typesetter\Config([ 'title' => 'Benjamin Button', 'author' => 'F. Scott Fitzgerald', 'theme' => 'bb', 'toc-enabled' => true, 'toc-links' => true, 'toc-header' => 'Table of Contents', 'footer' => '{PAGENO}', 'markdown-extensions' => ['md', 'markdown'], 'observers' => [ new \Typesetterio\Typesetter\Observers\DefaultMarkdownConfiguration(), new \Typesetterio\Typesetter\Observers\FirstElementInChapterCSSClass(), new \Typesetterio\Typesetter\Observers\BreakToPageBreak(), new \Typesetterio\Typesetter\Observers\Credits(), ], ]); $service = new \Typesetterio\Typesetter\Typesetter(); $pdfContent = $service->generate($config); file_put_contents('my-pdf.pdf', $pdfContent);
To learn more, please check out the documentation. This details configuration, customization, themes and cover generation, observers, listeners and more.
Demo
The demo/ directory contains a runnable example used for manual smoke testing. It includes a small theme, three Markdown chapters that exercise each bundled observer, and demo/run.php, which generates a PDF at demo/output.pdf (gitignored). Run it from the project root with php demo/run.php.
Credits
This was heavily influenced by the Ibis project but is a complete rewrite.
This package stands on the shoulders of giants like MPDF, some parts of Laravel and also the League Commonmark library.
Aaron Saray is the primary author and maintainer.
