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
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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.
