PHPで TCPDFというライブラリを使用して DBの内容をPDFに出力しようとしています。
初心者向けに紹介されたサイト参考にしたサイトをみながらなんとかPDFが画面に現われるようになりましたが、
自分なりに手順を拡張できずに困っています。
一般的な記事では
PHP
1$tcpdf->writeHTML($html);
のオブジェクト・メソッドで1度きりの表示内容設定ですが、改ページ制御のためにこの手順を何回かに分けて(ページヘッダ部分とTABLEのHTMLを格納)行って、PDFへの出力、
PHP
1$tcpdf->Output('XXXXXX.pdf', 'I');
を最後の1回に行う構成で考えています。以下現況のコーディングですが、PDFが現われなくなてしまいました。原因は一体なにでしょう?
今回functionにしているmPage()の部分を、functionとはせず単純に2回立て続けに書いたら、ちゃんと2ページに渡って同じデータの内容が表れてきました。ということは2回以上に渡って、writeHTMLのメソッドが実行されたった1回のOutputのメソッドが実行されても 問題はないということですよねぇ??
尚、$rows には4列の項目を保持する100レコードの連想配列が格納されています。
やはり$tcpdf->writeHTML($html);をfunctionにくくったことで 動かなくなってしまっているのでしょうか?(そうだとしたらどうすれば良いのか分からないので、対策をご教示頂けたら幸いです)
PHP
1function hMaker($pcnt) { 2 3 global $html2; 4 $html2 = '<div style="float:right; text-align: right;"><span>'.date('Y年m月d日').' </span><span>P.'.$pcnt.'</span></div><div style="float:left;" ><span class="b12" style="text-align: left;">○○○○株式会社</span><span> 行</span></div> 5 <div style="clear: both"></div> 6 <h1>注文書</h1> 7 <table><thead><tr><th style="width: 30%">取引先名</th><th style="width: 40%">住所</th><th style="width: 15%">TEL</th><th style="width: 15%">郵便番号</th></tr></thead>'; 8} 9 10function dMaker_f($col1,$col2,$col3,$col4) { 11 global $html2; 12 $html2 = $html2.'<tbody><tr><td style="width: 30%">'.$col1.'</td><td style="width: 40%">'.$col2.'</td><td style="width: 15%">'.$col3.'</td><td style="width: 15%">'.$col4.'</td></tr>'; 13} 14 15function dMaker($col1,$col2,$col3,$col4) { 16 global $html2; 17 $html2 = $html2.'<tr><td style="width: 30%">'.$col1.'</td><td style="width: 40%">'.$col2.'</td><td style="width: 15%">'.$col3.'</td><td style="width: 15%">'.$col4.'</td></tr>'; 18} 19 20 21$tcpdf = new TCPDF("L", "mm", "A4", true, "UTF-8" ); 22$tcpdf->SetFont("kozgopromedium", "", 10); 23$tcpdf->setPrintHeader(false); 24$tcpdf->SetDisplayMode(80); 25$tcpdf->SetAutoPageBreak(false); //自動改ページモードをオフ 26 27$linecount = 99; 28$pcnt = 0; 29foreach($rows as $row){ 30 if (count($rows)> 0 && $linecount > 50) { 31 if ($pcnt > 0) { 32 $html2 = $html2.'</tbody></table>'; 33 mPage(); 34 $html2 = null; 35 } 36 $linecount = 0; 37 $pcnt++; 38 $tcpdf->AddPage(); // 【ライブラリのメソッド】:ページ手配 39 hMaker($pcnt); // HTMLでヘッダのデザインを変数$html2に追記 40 dMaker_f($row["tname"], $row["taddress"], $row["ttelno"], $row["tpostno"]);// HTMLで明細を変数$html2に追記(TBODYタグ含む) 41 } else { 42 dMaker($row["tname"], $row["taddress"], $row["ttelno"], $row["tpostno"]);// HTMLで明細を変数$html2に追記(TBODYタグ含まない) 43 } 44 $linecount++; 45} 46if (count($rows)> 0) { 47 $html2 = $html2.'</tbody></table>'; 48} else { 49 $html2 = "対象はありません。"; 50} 51mPage(); 52 53//★☆★TCPDFを紹介している記事では、出力内容($html)が仕上がったら この部分を一度だけ実行 54//★☆★改ページ制御のため、ページ単位にこの部分を呼ぶようにしてみた。 55function mPage() { 56// $tcpdf->AddPage(); //【ライブラリのメソッド】:ページ手配⇒コメント!!! 57 $html = <<< EOF 58 <style> 59 h1 { 60 font-size: 24px; 61 text-align: center; 62 } 63 span.b12 { 64 font-size: 12px; 65 font-weight: bold; 66 } 67 table { 68 border-collapse: collapse; 69 } 70 table th, table td { 71 border: solid 1px black; 72 } 73 </style> 74EOF; 75 $tcpdf->writeHTML($html.$html2); // 【ライブラリのメソッド】:表示内容の設定 76} 77 78 79$tcpdf->Output('XXXXX.pdf', 'I'); // 【ライブラリのメソッド】:表示
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。