PHPを使用してPDFの帳票を出力する方法

PHP

ここでは、PHPのPDF出力ライブラリである「TCPDF」を使った方法を紹介します。
TCPDFは、HTMLコードから簡単にPDFを出力することが可能です。

「TCPDF」公式サイト
https://tcpdf.org

インストール

公式サイトのGitHubからソースをダウンロードして、適当な場所に設置するのみで使用することができます。
https://github.com/tecnickcom/tcpdf

基本的な書き方

//TCPDFの呼び出し
include_once("./TCPDF/tcpdf.php");

//HTML
$html = '<font color="#FF0000">こんにちは</font>';

//TCPDFインスタンス
$tcpdf = new TCPDF("P", "mm", "A4", true, "UTF-8" );

//ページ追加
$tcpdf->AddPage();

//PDF作成
$tcpdf->writeHTML($html);

//PDF出力
$tcpdf->Output("test.pdf", "I");

帳票の出力

TCPDFでは、CSSのpaddingが効きません。ただし、例外としてtableタグの中のpaddingだけ有効なのでtableタグで余白の調整を行います。
・tableタグとtableタグを2段にしてもボーダーが、自動で1つに重なってくれます。
・日本語を表示させるには、「TCPDFで日本語を表示させる方法」を参照してください。

<サンプル>

//TCPDFの呼び出し
include_once("./TCPDF/tcpdf.php");

//HTML
$html = '
<div style="width:595px;height:842px;">

<table>
<tr>
  <td style="text-align:center;font-size:24px;font-weight:bold;width:555px;">会員データ</td>
</tr>
</table>

<table style="padding-top:20px; padding-right:20px; padding-bottom:0px; padding-left:20px;">
<tr>
  <td>
    <table>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">会員No.</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">000001</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">社名</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">〇〇〇〇株式会社</td>
        </tr>
        </table>
      </td>
    </tr>
    </table>
    <table>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">代表者役職</td>
        </tr>
        </table>
      </td>
      <td style="width:183px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:183px;">代表取締役</td>
        </tr>
        </table>
      </td>
      <td style="width:90px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:90px;text-align:right;">代表者</td>
        </tr>
        </table>
      </td>
      <td style="width:182px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:182px;">〇〇 太郎</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">代表電話番号</td>
        </tr>
        </table>
      </td>
      <td style="width:183px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:183px;">00-0000-0000</td>
        </tr>
        </table>
      </td>
      <td style="width:90px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:90px;text-align:right;">代表FAX番号</td>
        </tr>
        </table>
      </td>
      <td style="width:182px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:182px;">00-0000-0000</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">郵便番号</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">000-0000</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">住所</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">東京都〇〇区○○0-0</td>
        </tr>
        </table>
      </td>
    </tr>
    </table>

    <div style="font-size:20px;"> </div>

    <table>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">入会日</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">2020/04/01</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">口数</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">1口</td>
        </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td style="width:100px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:100px;text-align:right;">金額</td>
        </tr>
        </table>
      </td>
      <td style="width:455px;border:solid 1px #000000;">
        <table style="padding-top:2px; padding-right:2px; padding-bottom:2px; padding-left:2px;">
        <tr>
          <td style="font-size:11px;width:455px;">10,000円</td>
        </tr>
        </table>
      </td>
    </tr>
    </table>

  </td>
</tr>
</table>

</div>
';

//TCPDFインスタンス A4縦で出力する
$tcpdf = new TCPDF("P", "mm", "A4", true, "UTF-8" );

//マージン 左、上、右
$tcpdf->SetMargins(0, 15, 0);

//ヘッダー出力しない
$tcpdf->setPrintHeader(false);

//フッター出力しない
$tcpdf->setPrintFooter(false);

//フッターマージン
$tcpdf->setFooterMargin(0);

//自動改ページ
$tcpdf->SetAutoPageBreak(true, 10);

//ページ追加
$tcpdf->AddPage();

//フォントの指定
$font = new TCPDF_FONTS();
$font_ipamp = $font->addTTFfont('./ipafont/ipagp.ttf');
$tcpdf->SetFont($font_ipamp);

//PDF作成
$tcpdf->writeHTML($html);

//PDFをブラウザに出力
$tcpdf->Output("test.pdf", "I");

<上記の出力結果>