Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code architecture.
Port of tinypdf from TypeScript to PHP.
- Create PDFs from scratch with zero dependencies
- Strongly typed with PHP 8.2+ type declarations
- Clean architecture with interfaces and value objects
- Support for text, rectangles, lines, JPEG images, and clickable links
- Built-in markdown to PDF conversion
- Text measurement and alignment
- Color support (hex format)
composer require kallefrombosnia/tinypdf-phpuse TinyPdf\TinyPdf;
use TinyPdf\TextOptions;
use TinyPdf\TextAlign;
$pdf = TinyPdf::create();
// Add a page (default US Letter: 612x792 points)
$pdf->page(function ($ctx) {
// Add text
$ctx->text('Hello World!', 50, 700, 24);
// Text with options
$ctx->text(
'Centered text',
50,
650,
16,
new TextOptions(
align: TextAlign::CENTER,
width: 500,
color: '#0066cc'
)
);
// Draw a rectangle
$ctx->rect(50, 600, 200, 100, '#ffcc00');
// Draw a line
$ctx->line(50, 580, 250, 580, '#000000', 2);
});
// Custom page size
$pdf->page(595, 842, function ($ctx) { // A4 size
$ctx->text('A4 Page', 50, 700, 18);
});
// Build and save
$pdfContent = $pdf->build();
file_put_contents('output.pdf', $pdfContent);$pdf = TinyPdf::create();
$pdf->page(function ($ctx) {
$jpegData = file_get_contents('image.jpg');
$ctx->image($jpegData, 50, 500, 200, 150);
});
file_put_contents('output.pdf', $pdf->build());use TinyPdf\MarkdownConverter;
$markdown = <<<MD
# Document Title
This is a paragraph with **bold** text.
## Section Header
- List item 1
- List item 2
- List item 3
1. Numbered item
2. Another item
---
Another paragraph after a horizontal rule.
MD;
$converter = new MarkdownConverter(
width: 612, // US Letter width
height: 792, // US Letter height
margin: 72 // 1 inch margins
);
$pdfContent = $converter->convert($markdown);
file_put_contents('document.pdf', $pdfContent);use TinyPdf\LinkOptions;
$pdf = TinyPdf::create();
$pdf->page(function ($ctx) {
$ctx->text('GitHub Repository', 50, 700, 12, new TextOptions(color: '#0066cc'));
$ctx->link('https://github.com/kallefrombosnia/tinypdf-php', 50, 695, 115, 20, new LinkOptions(underline: '#0066cc'));
$ctx->text('Check out Webflow agency', 50, 650, 12, new TextOptions(color: '#95a5a6'));
$ctx->link('https://www.flowout.com/', 50, 645, 150, 20);
});
file_put_contents('output.pdf', $pdf->build());use TinyPdf\TinyPdf;
$width = TinyPdf::measureText('Hello World', 24);
echo "Text width: {$width} points\n";The library includes several complete examples in the examples/ directory:
Run all examples at once:
php example.phpOr run individual examples:
# Basic text and shapes
php examples/basic/basic.php
# Professional invoice
php examples/invoice/invoice.php
# Markdown to PDF
php examples/markdown/markdown.php
# Multi-page document
php examples/multipage/multipage.phpEach example includes its own README with detailed information and generated PDF output.
- Basic - Text rendering, shapes, colors, alignment, and links (preview)
- Invoice - Professional invoice template (preview)
- Receipt - Sales receipt template (preview)
- Report - Business report with charts (preview)
- Shipping Label - Package shipping label (preview)
- Markdown - Convert markdown to PDF (preview)
- Multi-Page - Multi-page documents (preview)
- Ticket - Event ticket design (preview)
- Data Export - Export data tables (preview)
- Service Agreement - Contract template (preview)
For detailed API documentation, see the inline documentation in the source code:
- TinyPdf - Main factory class
- PageContextInterface - Drawing operations (text, rect, line, image, link)
- TextOptions - Text rendering options
- LinkOptions - Link configuration
- MarkdownConverter - Markdown to PDF conversion
PDF uses a coordinate system where:
- Origin (0, 0) is at the bottom-left corner
- X increases to the right
- Y increases upward
- Units are in points (1/72 inch)
Common page sizes:
- US Letter: 612 x 792 points
- A4: 595 x 842 points
composer test # Run all tests
composer test:coverage # Run tests with coverage
composer phpstan # Run static analysis77 tests with comprehensive coverage including unit tests, architecture tests, and integration tests.
For detailed information about the test suite, coverage, and quality standards, see tests/README.md.
MIT
This is a PHP port of tinypdf by Lulzx.
