HTMLパーサー
Htmlモジュール(8クラス)は、組み込みのHTML-to-PDFレンダラーを提供します。HTML/CSSのサブセットを解析し、外部ブラウザを必要とせずにPDFに直接レンダリングします。
主要クラス
| クラス | 責務 |
|---|---|
HtmlParser | メインエントリーポイント — HTMLをトークン化してレンダリング |
CssRule | CSSセレクタと宣言を詳細度付きで解析 |
HtmlStyleState | ネストされたスタイルコンテキスト(フォント、色、配置)を追跡 |
TableParser | <table> レイアウトを処理 — カラム幅、スパン、ヘッダー |
HtmlTagHandler | 開始/終了タグのコールバックをディスパッチ |
HtmlTokenizer | 生のHTMLをタグとテキストのトークンに分割 |
HtmlEntity | 名前付きおよび数値のHTMLエンティティをデコード |
InlineStyle | style="..." 属性文字列を解析 |
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 = ''): staticwriteHtmlCell()
位置指定された矩形セル内に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-family | DejaVuSans, Helvetica, serif |
font-size | 12pt、16px、1.2em |
font-weight / font-style | bold、italic、normal |
color / background-color | #ff6600、rgb(255,102,0)、red |
text-align | left、center、right、justify |
text-decoration | underline、line-through、none |
line-height | 1.5、18pt |
margin / padding | 5px、10px 20px |
border | 1px solid #ddd |
width / height | 100%、200px |
CSSルール解析(CssRule)
CssRule はカスケード解決のために詳細度を計算します:
- 要素セレクタ
h1、td— 詳細度 (0, 0, 1) - クラスセレクタ
.highlight— 詳細度 (0, 1, 0) - IDセレクタ
#header— 詳細度 (1, 0, 0) - 複合セレクタ
table td.active— 詳細度は合算
同じ詳細度はソース順序で解決されます(最後の宣言が優先)。
スタイル状態(HtmlStyleState)
HtmlStyleState はスタイルコンテキストのスタックを管理します。開始タグで状態がプッシュされ、終了タグでポップされます。これにより、ネストされたスタイルが兄弟要素にリークすることなく正しく解決されます。
テーブルエンジン(TableParser)
colspan/rowspan— 水平および垂直のセル結合- 自動カラム幅 — コンテンツに基づく比例配分
- 固定カラム幅 —
<td>または<th>のCSSwidthで指定 - ヘッダースタイリング —
<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テーブルは、自動改ページが有効な場合、ページをまたいで自動的に分割されます。