質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.36%

  • PHP

    15164questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPのライブラリTCPDFでテーブル表示が崩れてがうまく表示できない

解決済

回答 1

投稿 2017/11/27 19:10 ・編集 2017/11/28 10:00

  • 評価
  • クリップ 1
  • VIEW 59

undertaker

score 33

前提・実現したいこと

PHPでPDF出力を行いたいため、tcpdfを用いてHTMLからPDFを出力しようとしたのですが、
テーブルの結合(colspan,rowspan)がうまく機能していないのか、テーブルレイアウトが崩れた状態で出力されてしまい、
困っています。

発生している問題・エラーメッセージ

PDF自体は出力されるが、colspan,rowspanが機能していないようなテーブルが出力されてしまう

エラーメッセージ

該当のソースコード

require_once ("tcpdf/tcpdf.php");

/* PDF オブジェクトを作成し、以降の処理で操作します */
$pdf = new TCPDF("L", "mm", "A4", true, "UTF-8".false);

/* ヘッダフッタマージン  */
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetMargins(10, 10, 10);
//$HD = date("Y/m/d")." ".date("H:n:s");
/*  フォント  */
//$pdf->SetFont("kozgopromedium");
$pdf->SetFont('kozminproregular','',14);
$pdf->AddPage();
$html1 = <<<EOD
        <style>

        .tsukinhi
        {
            width : 500px;
            border: 1px solid #000;
        }

        .tsukinhi tr{

            height : 40px;

        }

        .tsukinhi td{
            width : 200px;
            text-align: center;
            border: 1px solid #000;
        }


        </style>
EOD;

/*  テーブルヘッダ  */
$html2 = <<<EOD
    <div style="float: left;margin-right: 20px;">
        <table border=0 cellpadding=0 cellspacing=0 class="tsukinhi">
            <tr style="height:0px;border:none;">
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
            </tr>
            <tr>
                <td colspan='6'>通勤定期代請求書</td>
            </tr>
            <tr>
        <td colspan="2">交通機関名</td>
        <td colspan="4">$kotsukikan1</td>
            </tr>
            <tr>
                <td colspan="2" rowspan="2">区間</td>
                <td colspan="4" style="border-bottom:none;">$kukan1</td>
            </tr>
        </table>
    </div>
EOD;

/*  HTMLをPDFへ  */
$html = $html1 . $html2;

ob_end_clean();
$pdf->writeHTML($html, true, 0, true, 0, "");
//$pdf->writeHTML($html, true, 0, true, 0, "");
//$pdf->writeHTML($html, true, false, false, false, '');
$pdf->Output("/var/www/html/nbc/ringi01list/kotsuinv.pdf", "F");
}

?>
---------------------
|  通勤交通費申請書   |
------------------------------------------
|  交通機関名        |                     |
------------------------------------------
|  区間             |                      |
------------------------------------------

※PDFで出力されたイメージをテキストで再現しました。
 HTMLでブラウザ出力した時はどの列も幅が同じで、見た目も崩れていなかったです。

試したこと

課題に対してアプローチしたことを記載してください

補足情報(言語/FW/ツール等のバージョンなど)

PHPバージョン 5.3
TCPDFバージョン 6.2.13

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

とりあえず、解決策です。
まずはスタイルシートのwidthをコメントアウトします

        .tsukinhi td{
            /*width : 200px;*/
            text-align: center;
            border: 1px solid #000;
        }


次にcolspan='6'のシングルクォートをダブルクォートに直しましょう。

<td colspan="6">通勤定期代請求書</td>

これで修正されると思います。

 参考(動作確認後のソース)

※私の環境用にフォルダとかを弄っています。

<?php
require_once ("./tcpdf/tcpdf.php");

/* PDF オブジェクトを作成し、以降の処理で操作します */
$pdf = new TCPDF("L", "mm", "A4", true, "UTF-8".false);

/* ヘッダフッタマージン  */
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetMargins(10, 10, 10);
//$HD = date("Y/m/d")." ".date("H:n:s");
/*  フォント  */
//$pdf->SetFont("kozgopromedium");
$pdf->SetFont('kozminproregular','',14);
$pdf->AddPage();
$html1 = <<<EOD
        <style>

        .tsukinhi
        {
            width : 500px;
            border: 1px solid #000;
        }

        .tsukinhi tr{

            height : 40px;

        }

        .tsukinhi td{
            /*width : 200px;*/
            text-align: center;
            border: 1px solid #000;
        }


        </style>
EOD;
$kotsukikan1 = "新京成電鉄";
$kukan1 = '松戸~新津田沼';
/*  テーブルヘッダ  */
$html2 = <<<EOD
    <div style="float: left;margin-right: 20px;">
        <table border=0 cellpadding=0 cellspacing=0 class="tsukinhi">
            <tr style="height:0px;border:none;">
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
                <td style="border:none;"></td>
            </tr>
            <tr>
                <td colspan="6">通勤定期代請求書</td>
            </tr>
            <tr>
        <td colspan="2">交通機関名</td>
        <td colspan="4">$kotsukikan1</td>
            </tr>
            <tr>
                <td colspan="2" rowspan="2">区間</td>
                <td colspan="4" style="border-bottom:none;">$kukan1</td>
            </tr>
        </table>
    </div>
EOD;

/*  HTMLをPDFへ  */
$html = $html1 . $html2;

ob_end_clean();
$pdf->writeHTML($html, true, 0, true, 0, "");
//$pdf->writeHTML($html, true, 0, true, 0, "");
//$pdf->writeHTML($html, true, false, false, false, '');

$pdf->Output(__DIR__ . "/data/kotsuinv.pdf", "F");

投稿 2017/11/28 14:53

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 16:57

    回答ありがとうございます。
    解消できました。
    追加でもしご存知でしたら教えていただきたいのですが、この先でtableを配置し結合等しているのですが、箇所により線を消したいのですが、「<td style="border-bottom: none;"></td>」のようにしてもborderが効いていないような表示となってしまうのですが、tcpdfでは使用できないのでしょうか?

    キャンセル

  • 2017/11/28 16:59

    そのようなことは、おそらく無いと思います。
    別の質問としてソースコードと結果を提示されてみてはいかがでしょうか?

    キャンセル

  • 2017/11/29 14:15

    そうですね。別途、質問としてあげたいと思います。ご回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • PHP

    15164questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。