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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

解決済

1回答

4892閲覧

TCPDFで出力件数が多い時に白紙になる

taizan

総合スコア12

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

1クリップ

投稿2015/10/07 02:37

PHPでPDF作成のライブラリ「TCPDF」を利用して請求書を生成しています。
請求の件数がある一定の数(80程度)を超えたあたりから、生成されるPDFが白紙になる現象が発生しました。

件数が多くても正しく生成するにはどうすればいいでしょうか?
解決策をご存知の方がいらっしゃいましたら、ぜひアドバイスいただければと思います。

TCPDFのバージョン:6.0.099
PHPのバージョン:PHP5.3.3
サーバー:Xサーバー

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「件数が多い時に」ということなのでメモリ上限を超えたとかそういうことが原因かと思いますが、エラーメッセージの表示設定はされていないのでしょうか?
エラー表示やソースコードがあれば解決のヒントになるでしょうけど、今のところ情報が少ないのでこれ以上のアドバイスは難しいです。

投稿2015/10/07 02:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taizan

2015/10/07 03:37

早速の回答ありがとうございます。 エラー(NOTICEレベルでも)が発生すれば表示されるようにしていますが、今回の件では表示されていません。 またメモリーはmemory_limitを200Mから300Mにしたものの、問題の解決には至っていない状況です。
退会済みユーザー

退会済みユーザー

2015/10/07 03:45 編集

memory_limit を超えた場合や max_execute_time を超えたときにはFatal が発生しますからその線は消えるということですね。 となるとソースを見る以外に解決の糸口はつかめないですね。
taizan

2015/10/07 04:06

ありがとうございます。 ソースコード全てとなるととても長くなってしまうので、ひとまずはPDF生成の部分だけ抜粋します。 少し補足しますと、 TEMPLATE_DIRに存在するテンプレートファイル「invoice.html」を読み込み、その中にある「%%○○%%」という部分を各変数で置き換える処理です。 「%%LIST%%」の部分がテーブル行を出力する部分で、この行が多いと処理に失敗するようです。 --以下ソースコードの一部-- $invoice_template = file_get_contents(TEMPLATE_DIR.'invoice.html'); // HTMLで出力に変更 $pdf = new TCPDF( "P", "mm", "A4", true, "UTF-8" ); //フォントの設定 $pdf->SetFont('kozgopromedium','',10); //ヘッダーとフッターを消す $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); $heisei = intval($output_year) - 1988; $invoice_template = mb_ereg_replace('%%HEISEI%%', $heisei, $invoice_template); $invoice_template = mb_ereg_replace('%%MONTH%%', $output_month, $invoice_template); $invoice_template = mb_ereg_replace('%%DAY%%', $output_day, $invoice_template); $invoice_template = mb_ereg_replace('%%NAME%%', h($name).' '.h($staff_name_1), $invoice_template); $invoice_template = mb_ereg_replace('%%LIST%%', $list_str, $invoice_template); $invoice_template = mb_ereg_replace('%%SUBTOTAL%%', number_format($charge_total), $invoice_template); $invoice_template = mb_ereg_replace('%%TOTAL%%', number_format($charge_total), $invoice_template); $invoice_template = mb_ereg_replace('%%SERVICE_NAME%%', SERVICE_NAME, $invoice_template); if($invoice_month){ $invoice_template = mb_ereg_replace('%%INVOICE_MONTH%%', $invoice_month.'月分 ', $invoice_template); }else{ $invoice_template = mb_ereg_replace('%%INVOICE_MONTH%%', '', $invoice_template); } $pdf->AddPage(); $pdf->writeHTML($invoice_template, true, false, false, false, ''); $pdf->Output('invoice.pdf','I'); --処理終了--ソースコードここまで--
退会済みユーザー

退会済みユーザー

2015/10/07 04:21

なるほど。HTML形式のデータを読み込んでPDFに変換しているわけですね。 HTMLテンプレートではなく、PDFテンプレートを読み込んで配列データを割り当てるというような動作の方が軽量かもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問