https://github.com/kallefrombosnia/tinypdf-php
Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code.
https://github.com/kallefrombosnia/tinypdf-php
document markdown pdf php tinypdf
Last synced: 6 months ago
JSON representation
Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code.
- Host: GitHub
- URL: https://github.com/kallefrombosnia/tinypdf-php
- Owner: kallefrombosnia
- License: mit
- Created: 2025-12-22T15:38:22.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-01-05T10:52:26.000Z (6 months ago)
- Last Synced: 2026-01-13T19:50:54.647Z (6 months ago)
- Topics: document, markdown, pdf, php, tinypdf
- Language: PHP
- Homepage:
- Size: 1.71 MB
- Stars: 22
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TinyPDF-PHP
[](https://github.com/kallefrombosnia/tinypdf-php/actions/workflows/tests.yml)
[](https://github.com/kallefrombosnia/tinypdf-php/issues)
Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code architecture.
Port of [tinypdf](https://github.com/Lulzx/tinypdf) from TypeScript to PHP.
## Features
- 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)
## Installation
```bash
composer require kallefrombosnia/tinypdf-php
```
## Usage
### Basic PDF Creation
```php
use 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);
```
### Adding Images
```php
$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());
```
### Markdown to PDF
```php
use TinyPdf\MarkdownConverter;
$markdown = <<convert($markdown);
file_put_contents('document.pdf', $pdfContent);
```
### Adding Clickable Links
```php
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());
```
### Text Measurement
```php
use TinyPdf\TinyPdf;
$width = TinyPdf::measureText('Hello World', 24);
echo "Text width: {$width} points\n";
```
## Examples
The library includes several complete examples in the `examples/` directory:
### Running Examples
Run all examples at once:
```bash
php example.php
```
Or run individual examples:
```bash
# 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.php
```
### Available Examples
Each example includes its own README with detailed information and generated PDF output.
- **[Basic](examples/basic/)** - Text rendering, shapes, colors, alignment, and links ([preview](examples/basic/output.pdf))
- **[Invoice](examples/invoice/)** - Professional invoice template ([preview](examples/invoice/output.pdf))
- **[Receipt](examples/receipt/)** - Sales receipt template ([preview](examples/receipt/output.pdf))
- **[Report](examples/report/)** - Business report with charts ([preview](examples/report/output.pdf))
- **[Shipping Label](examples/shipping-label/)** - Package shipping label ([preview](examples/shipping-label/output.pdf))
- **[Markdown](examples/markdown/)** - Convert markdown to PDF ([preview](examples/markdown/output.pdf))
- **[Multi-Page](examples/multipage/)** - Multi-page documents ([preview](examples/multipage/output.pdf))
- **[Ticket](examples/ticket/)** - Event ticket design ([preview](examples/ticket/output.pdf))
- **[Data Export](examples/data-export/)** - Export data tables ([preview](examples/data-export/output.pdf))
- **[Service Agreement](examples/service-agreement/)** - Contract template ([preview](examples/service-agreement/output.pdf))
## API Reference
For detailed API documentation, see the inline documentation in the source code:
- [TinyPdf](src/TinyPdf.php) - Main factory class
- [PageContextInterface](src/Contracts/PageContextInterface.php) - Drawing operations (text, rect, line, image, link)
- [TextOptions](src/TextOptions.php) - Text rendering options
- [LinkOptions](src/LinkOptions.php) - Link configuration
- [MarkdownConverter](src/MarkdownConverter.php) - Markdown to PDF conversion
## Coordinate System
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
## Testing & Quality
```bash
composer test # Run all tests
composer test:coverage # Run tests with coverage
composer phpstan # Run static analysis
```
**77 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](tests/README.md).
## License
MIT
## Credits
This is a PHP port of [tinypdf](https://github.com/Lulzx/tinypdf) by Lulzx.