Skip to content

HTMLパーサー

Htmlモジュール(8クラス)は、組み込みのHTML-to-PDFレンダラーを提供します。HTML/CSSのサブセットを解析し、外部ブラウザを必要とせずにPDFに直接レンダリングします。

主要クラス

クラス責務
HtmlParserメインエントリーポイント — HTMLをトークン化してレンダリング
CssRuleCSSセレクタと宣言を詳細度付きで解析
HtmlStyleStateネストされたスタイルコンテキスト(フォント、色、配置)を追跡
TableParser<table> レイアウトを処理 — カラム幅、スパン、ヘッダー
HtmlTagHandler開始/終了タグのコールバックをディスパッチ
HtmlTokenizer生のHTMLをタグとテキストのトークンに分割
HtmlEntity名前付きおよび数値のHTMLエンティティをデコード
InlineStylestyle="..." 属性文字列を解析

writeHtml()

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('DejaVuSans', '', 10)
    ->writeHtml('<h1>Hello World</h1><p>This is a paragraph.</p>');
php
writeHtml(string $html, bool $ln = true, bool $fill = false, bool $reseth = false, bool $cell = false, string $align = ''): static

writeHtmlCell()

位置指定された矩形セル内にHTMLをレンダリングします:

php
writeHtmlCell(float $w, float $h, float $x, float $y, string $html, mixed $border = 0, int $ln = 0, bool $fill = false, bool $reseth = true, string $align = '', bool $autopadding = true): static

サポートされるHTMLタグ

ブロック: <h1>--<h6><p><div><blockquote><pre><hr>インライン: <b><strong><i><em><u><s><del><sup><sub><span><code><a><br>リスト: <ul><ol><li> — 最大4レベルのネストに対応。 テーブル: <table><tr><th><td> — 以下のテーブルエンジンを参照。 メディア: <img src="..." width="..." height="...">

CSSサポート

スタイルは <style> ブロック、インライン style 属性、またはその両方で適用できます。パーサーは詳細度とカスケード順序を尊重します。

プロパティ値の例
font-familyDejaVuSans, Helvetica, serif
font-size12pt16px1.2em
font-weight / font-stylebolditalicnormal
color / background-color#ff6600rgb(255,102,0)red
text-alignleftcenterrightjustify
text-decorationunderlineline-throughnone
line-height1.518pt
margin / padding5px10px 20px
border1px solid #ddd
width / height100%200px

CSSルール解析(CssRule)

CssRule はカスケード解決のために詳細度を計算します:

  • 要素セレクタ h1td — 詳細度 (0, 0, 1)
  • クラスセレクタ .highlight — 詳細度 (0, 1, 0)
  • IDセレクタ #header — 詳細度 (1, 0, 0)
  • 複合セレクタ table td.active — 詳細度は合算

同じ詳細度はソース順序で解決されます(最後の宣言が優先)。

スタイル状態(HtmlStyleState)

HtmlStyleState はスタイルコンテキストのスタックを管理します。開始タグで状態がプッシュされ、終了タグでポップされます。これにより、ネストされたスタイルが兄弟要素にリークすることなく正しく解決されます。

テーブルエンジン(TableParser)

  • colspan / rowspan — 水平および垂直のセル結合
  • 自動カラム幅 — コンテンツに基づく比例配分
  • 固定カラム幅<td> または <th> のCSS width で指定
  • ヘッダースタイリング<th> はデフォルトでボールドテキストが適用
  • 改ページ — ページの高さを超えるテーブルは自動的に改ページ

完全な例

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('DejaVuSans', '', 10)
    ->writeHtml('
        <style>
            h1 { color: #ff6600; font-size: 18pt; }
            .highlight { background-color: #ffffcc; padding: 5px; }
            table { border-collapse: collapse; width: 100%; }
            th { background-color: #333; color: #fff; padding: 8px; }
            td { border: 1px solid #ddd; padding: 8px; }
        </style>
        <h1>Invoice #2026-001</h1>
        <p class="highlight">Due: 2026-03-01</p>
        <table>
            <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
            <tr><td>Widget A</td><td>10</td><td>$50.00</td></tr>
            <tr><td colspan="2">Total</td><td><b>$50.00</b></td></tr>
        </table>
    ');

ヒント

  • writeHtml() の前に必ず setFont() を呼び出してください — パーサーはスタイル未指定のテキストのデフォルトとして現在のフォントを使用します。
  • 完全なCSS3サポート(Flexbox、Grid、Webフォント)が必要な場合は、代わりにArtisanパッケージを使用してください。
  • 大きなHTMLテーブルは、自動改ページが有効な場合、ページをまたいで自動的に分割されます。

LGPL-3.0-or-later ライセンスの下で公開されています。