memo3


```
<?php
require_once('tcpdf_include.php');

// ハガキサイズ：100mm × 148mm
$pdf = new TCPDF('P', 'mm', array(100, 148), true, 'UTF-8', false);
$pdf->SetMargins(0, 0, 0);
$pdf->AddPage();

// 表の設定
$col1Width = 45;
$col2Width = 55;
$totalWidth = $col1Width + $col2Width; // = 100mm（ハガキ全幅）
$cellHeight = 15;
$totalHeight = $cellHeight * 4;

$startX = 0; // 左端からスタート（余白なし）
$startY = (148 - $totalHeight - 30) / 2; // 表＋文章の高さを考慮して中央あたりに

$labels = [
    ['名前', '山田 太郎'],
    ['住所', '東京都〇〇区〇〇町'],
    ['電話', '090-1234-5678'],
    ['備考', '表のテストです']
];

// 表の描画
for ($row = 0; $row < 4; $row++) {
    $y = $startY + ($row * $cellHeight);
    $x = $startX;

    // 1列目
    $pdf->SetXY($x, $y);
    $pdf->Cell($col1Width, $cellHeight, $labels[$row][0], 1, 0, 'C');

    // 2列目
    $x += $col1Width;
    $pdf->SetXY($x, $y);
    $pdf->Cell($col2Width, $cellHeight, $labels[$row][1], 1, 0, 'C');
}

// 表の下に文章（150文字程度）を表示
$paragraph = <<<EOT
この文章は表の下に表示される150文字の例文です。TCPDFではMultiCellを使えばこのように幅に合わせて自動で折り返されます。日本語の扱いにも対応していてとても便利なPDFライブラリです。
EOT;

$textY = $startY + $totalHeight + 5; // 表の下に少し余白をあけて
$pdf->SetXY($startX, $textY);
$pdf->SetFont('kozminproregular', '', 10); // 日本語フォント
$pdf->MultiCell($totalWidth, 0, $paragraph, 0, 'L');

$pdf->Output('hagaki_fullwidth_table_paragraph.pdf', 'I');


<?php
require_once('tcpdf_include.php');

$pdf = new TCPDF('P', 'mm', array(100, 148), true, 'UTF-8', false);
$pdf->SetMargins(0, 0, 0);
$pdf->AddPage();

// 表の設定
$col1Width = 30;  // 縦書き列の幅
$col2Width = 70;  // 横書き列の幅
$cellHeight = 40; // セルの高さ
$startX = 10;
$startY = 50;

// 枠線を描画
$pdf->SetXY($startX, $startY);
$pdf->Cell($col1Width, $cellHeight, '', 1, 0, 'C');
$pdf->Cell($col2Width, $cellHeight, '', 1, 0, 'C');


// 1列目（縦書きテキスト、フォント小）
$verticalText = "テ\nキ\nス\nト";
$pdf->StartTransform();
$pdf->Rotate(90, $startX + 5, $startY + 5); // 90度回転させる
$pdf->SetXY($startX + 5, $startY + 5);
$pdf->SetFont('kozminproregular', '', 8); // フォントサイズを小さく
$pdf->Cell($cellHeight - 10, 0, $verticalText, 0, 0, 'L');
$pdf->StopTransform();

// 2列目（横書きテキスト、フォント大）
$horizontalText = "テキストテキスト";
$pdf->SetXY($startX + $col1Width + 5, $startY + 5);
$pdf->SetFont('kozminproregular', '', 18); // フォントサイズを大きく
$pdf->Cell($col2Width - 10, $cellHeight - 10, $horizontalText, 0, 0, 'L');

$pdf->Output('vertical_horizontal_table_with_font_sizes.pdf', 'I');

$pdf = new TCPDF('P', 'mm', array(100, 148), true, 'UTF-8', false);
$pdf->SetMargins(0, 0, 0);
$pdf->AddPage();

// 表の設定
$col1Width = 30;  // 縦書き列の幅
$col2Width = 70;  // 横書き列の幅
$cellHeight = 40; // セルの高さ
$startX = 10;
$startY = 50;

// 枠線を描画
$pdf->SetXY($startX, $startY);
$pdf->Cell($col1Width, $cellHeight, '', 1, 0, 'C');
$pdf->Cell($col2Width, $cellHeight, '', 1, 0, 'C');

// 1列目（縦書きテキスト、フォント小）
$verticalText = "テ\nキ\nス\nト";
$pdf->StartTransform();
$pdf->Rotate(90, $startX + 5, $startY + 5); // 90度回転させる
$pdf->SetXY($startX + 5, $startY + 5);
$pdf->SetFont('kozminproregular', '', 8); // フォントサイズを小さく
$pdf->Cell($cellHeight - 10, 0, $verticalText, 0, 0, 'L');
$pdf->StopTransform();

// 2列目（横書きテキスト、フォント大）
$horizontalText = "テキストテキスト";
$pdf->SetXY($startX + $col1Width + 5, $startY + 5);
$pdf->SetFont('kozminproregular', '', 18); // フォントサイズを大きく
$pdf->Cell($col2Width - 10, $cellHeight - 10, $horizontalText, 0, 0, 'L');

// 200文字の文章（「。」で改行）
$longText = "ここに200文字くらいの文章が入ります。 この文章はハガキの縦サイズの半分くらいを占める長さです。折り返して表示されるようになっており、横幅いっぱいに文章が表示されます。文章の長さは大体200文字程度です。長い文章でも、必要に応じて折り返して見やすくなります。";

// 改行位置を「。」で設定
$longTextWithBreaks = preg_replace('/。/', "。<br>", $longText); // 「。」の後に改行を挿入

$pdf->SetXY($startX, $startY + $cellHeight + 10);
$pdf->SetFont('kozminproregular', '', 10);
$pdf->WriteHTML($longTextWithBreaks);
$pdf->Output('output_postcard.pdf', 'I');


```

```
<?php
require_once('tcpdf_include.php');

// クラスの定義
class PostcardPDF extends TCPDF {
    // 表の設定
    public $col1Width = 45;
    public $col2Width = 55;
    public $cellHeight = 15;
    public $totalWidth;
    public $totalHeight;
    public $startX = 0;
    public $startY;

    // コンストラクタ
    public function __construct() {
        parent::__construct('P', 'mm', array(100, 148), true, 'UTF-8', false);
        $this->SetMargins(0, 0, 0);
        $this->totalWidth = $this->col1Width + $this->col2Width;
        $this->totalHeight = $this->cellHeight * 4;
        $this->startY = (148 - $this->totalHeight - 30) / 2;
        $this->AddPage();
    }

    // 表を描画
    public function drawTable($labels) {
        for ($row = 0; $row < 4; $row++) {
            $y = $this->startY + ($row * $this->cellHeight);
            $x = $this->startX;

            // 1列目
            $this->SetXY($x, $y);
            $this->Cell($this->col1Width, $this->cellHeight, $labels[$row][0], 1, 0, 'C');

            // 2列目
            $x += $this->col1Width;
            $this->SetXY($x, $y);
            $this->Cell($this->col2Width, $this->cellHeight, $labels[$row][1], 1, 0, 'C');
        }
    }

    // 200文字の文章を表示
    public function addParagraph($paragraph) {
        $textY = $this->startY + $this->totalHeight + 5; // 表の下に少し余白をあけて
        $this->SetXY($this->startX, $textY);
        $this->SetFont('kozminproregular', '', 10); // 日本語フォント
        $this->MultiCell($this->totalWidth, 0, $paragraph, 0, 'L');
    }

    // 縦書き横書き表の描画
    public function drawVerticalHorizontalTable() {
        // 枠線を描画
        $this->SetXY($this->startX, $this->startY);
        $this->Cell($this->col1Width, $this->cellHeight, '', 1, 0, 'C');
        $this->Cell($this->col2Width, $this->cellHeight, '', 1, 0, 'C');

        // 1列目（縦書きテキスト、フォント小）
        $verticalText = "テ\nキ\nス\nト";
        $this->StartTransform();
        $this->Rotate(90, $this->startX + 5, $this->startY + 5); // 90度回転させる
        $this->SetXY($this->startX + 5, $this->startY + 5);
        $this->SetFont('kozminproregular', '', 8); // フォントサイズを小さく
        $this->Cell($this->cellHeight - 10, 0, $verticalText, 0, 0, 'L');
        $this->StopTransform();

        // 2列目（横書きテキスト、フォント大）
        $horizontalText = "テキストテキスト";
        $this->SetXY($this->startX + $this->col1Width + 5, $this->startY + 5);
        $this->SetFont('kozminproregular', '', 18); // フォントサイズを大きく
        $this->Cell($this->col2Width - 10, $this->cellHeight - 10, $horizontalText, 0, 0, 'L');
    }

    // 200文字の文章を「。」で改行
    public function addParagraphWithBreak($paragraph) {
        // 改行位置を「。」で設定
        $longTextWithBreaks = preg_replace('/。/', "。<br>", $paragraph); // 「。」の後に改行を挿入
        $this->SetXY($this->startX, $this->startY + $this->cellHeight + 10);
        $this->SetFont('kozminproregular', '', 10);
        $this->WriteHTML($longTextWithBreaks);
    }
}

// 使用例

$pdf = new PostcardPDF();

// 表の内容
$labels = [
    ['名前', '山田 太郎'],
    ['住所', '東京都〇〇区〇〇町'],
    ['電話', '090-1234-5678'],
    ['備考', '表のテストです']
];

// 表の描画
$pdf->drawTable($labels);

// 200文字の文章の例
$paragraph = <<<EOT
この文章は表の下に表示される150文字の例文です。TCPDFではMultiCellを使えばこのように幅に合わせて自動で折り返されます。日本語の扱いにも対応していてとても便利なPDFライブラリです。
EOT;

// 文章を追加
$pdf->addParagraph($paragraph);

// 縦書き横書きの表を描画
$pdf->drawVerticalHorizontalTable();

// 200文字の文章（「。」で改行）
$longText = "ここに200文字くらいの文章が入ります。 この文章はハガキの縦サイズの半分くらいを占める長さです。折り返して表示されるようになっており、横幅いっぱいに文章が表示されます。文章の長さは大体200文字程度です。長い文章でも、必要に応じて折り返して見やすくなります。";

// 改行位置を「。」で設定して文章追加
$pdf->addParagraphWithBreak($longText);

// PDF出力
$pdf->Output('output_postcard.pdf', 'I');
?>

require_once('tcpdf_include.php');

class PostcardPDF extends TCPDF {
    private $col1Width = 30;  // 縦書き列の幅
    private $col2Width = 70;  // 横書き列の幅
    private $cellHeight = 40; // セルの高さ
    private $radius = 2;      // 角丸の半径（控えめに設定）
    
    public function __construct() {
        parent::__construct('P', 'mm', array(100, 148), true, 'UTF-8', false);
        $this->SetMargins(0, 0, 0);
        $this->AddPage();
    }

    public function drawRoundedRect($startX, $startY) {
        // 角丸枠を描画（上部中央に配置）
        $this->SetLineWidth(0.5);
        $this->RoundedRect($startX, $startY, $this->col1Width + $this->col2Width, $this->cellHeight, $this->radius, 'All', 'D');
    }

    public function drawVerticalText($startX, $startY, $text) {
        // 縦書きテキストを描画
        $this->StartTransform();
        $this->Rotate(90, $startX + 5, $startY + 5); // 90度回転させる
        $this->SetXY($startX + 5, $startY + 5);
        $this->SetFont('kozminproregular', '', 8); // フォントサイズを小さく
        $this->Cell($this->cellHeight - 10, 0, $text, 0, 0, 'L');
        $this->StopTransform();
    }

    public function drawHorizontalText($startX, $startY, $text) {
        // 横書きテキストを描画
        $this->SetXY($startX + $this->col1Width + 5, $startY + 5);
        $this->SetFont('kozminproregular', '', 18); // フォントサイズを大きく
        $this->Cell($this->col2Width - 10, $this->cellHeight - 10, $text, 0, 0, 'L');
    }

    public function drawParagraph($startX, $startY, $text) {
        // 200文字の文章を表示（「。」で改行）
        $textWithBreaks = preg_replace('/。/', "。<br>", $text); // 「。」の後に改行を挿入
        $this->SetXY($startX, $startY + $this->cellHeight + 10);
        $this->SetFont('kozminproregular', '', 10);
        $this->WriteHTML($textWithBreaks);
    }

    public function generatePostcard($text1, $text2, $paragraph) {
        // 中央位置に角丸枠を描画
        $startX = (100 - $this->col1Width - $this->col2Width) / 2; // 上部中央に配置
        $startY = 10; // 上から少し下がった位置

        // 角丸枠を描画
        $this->drawRoundedRect($startX, $startY);

        // 縦書きテキスト（1列目）
        $this->drawVerticalText($startX, $startY, $text1);

        // 横書きテキスト（2列目）
        $this->drawHorizontalText($startX, $startY, $text2);

        // 200文字の文章（下部）
        $this->drawParagraph($startX, $startY, $paragraph);

        // PDFを出力
        $this->Output('postcard_with_rounded_rect.pdf', 'I');
    }
}

// 使用例
$pdf = new PostcardPDF();

// テキストの内容
$text1 = "テ\nキ\nス\nト"; // 縦書きテキスト
$text2 = "テキストテキスト"; // 横書きテキスト
$paragraph = "ここに200文字くらいの文章が入ります。 この文章はハガキの縦サイズの半分くらいを占める長さです。折り返して表示されるようになっており、横幅いっぱいに文章が表示されます。文章の長さは大体200文字程度です。長い文章でも、必要に応じて折り返して見やすくなります。";

// PDFを生成
$pdf->generatePostcard($text1, $text2, $paragraph);


class PostcardPDF extends TCPDF {
    public function header() {
        // 上部中央に角丸枠を追加し、「テ　ス　ト」を表示
        $this->SetXY(25, 10);
        $this->SetFillColor(255, 255, 255);  // 背景色
        $this->SetLineWidth(0.5);
        $this->RoundedRect(0, 10, 100, 20, 4, '1111', 'DF');  // 角丸枠
        $this->SetFont('kozminproregular', '', 18);
        $this->Text(35, 17, "テ　ス　ト");  // 「テ　ス　ト」のテキスト
    }

    public function footer() {
        // フッターに何か追加する場合はこちら
    }
}

```