kallefrombosnia/tinypdf-php 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

kallefrombosnia/tinypdf-php

最新稳定版本:v1.1.0

Composer 安装命令:

composer require kallefrombosnia/tinypdf-php

包简介

Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code.

README 文档

README

TinyPDF-PHP Preview

Tests Issues

Minimal PDF creation library for PHP 8.2+. Zero dependencies, strongly typed, clean code architecture.

Port of 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

composer require kallefrombosnia/tinypdf-php

Usage

Basic PDF Creation

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

$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

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);

Adding Clickable Links

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

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:

php example.php

Or 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.php

Available Examples

Each example includes its own README with detailed information and generated PDF output.

API Reference

For detailed API documentation, see the inline documentation in the source code:

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

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.

License

MIT

Credits

This is a PHP port of tinypdf by Lulzx.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 21
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 20
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-22