2

十分に広い日付範囲が与えられた場合、30,000を超えるレコードを生成できるレポートがあります。HTML側から見ると、これほど大きな結果セットは問題ではありません。これは、特定の時間に表示可能な結果を​​100に制限するページ付けシステムを実装しているためです。

私の本当の問題は、ユーザーが「PDFを取得」ボタンを押すと発生します。これが発生した場合、基本的に、データを出力するレポートの部分を再実行し(レポート自体の結果は「保存」テーブルに格納されるため、データ収集ロジックを再実行する必要はありません)、保存します。結果は、と呼ばれる変数になります$html。この変数には、30,000レコードのデータと、PDFで正しくフォーマットするために必要なHTMLが含まれていることに注意してください。このHTML文字列を作成したら、それをTCPDFに渡して、ユーザーのPDFファイルを生成しようとします。ただし、PDFファイルを生成する代わりに、エラーメッセージ(「PDfの生成...」)ダイアログが消えて、システムは何も要求しなかったように動作します。

テストを通じて、問題は$html渡される変数のサイズにあることがわかりました。3Kレコードのレポートの場合は、正常に機能します。それ以上の場合、レポートのHTML側は印刷されますが、PDFは印刷されません。

役立つ情報

  • PHP 5.3
  • PDF生成用のTCPDF(PS2PDFも試してみました)
  • スクリプトのメモリ制限:500 MB

このサイズのPDFを生成するときに、この規模のデータをどのように処理しますか?

4

4 に答える 4

1

この問題を解決した方法は次のとおりです。HTML出力に含まれている文字列の一部にわずかなエンコードの問題があることに気付きました。データベースにクエリを実行しているときに特定の文字列に対してhtmlentityを実行し、問題を解決しました。

これが問題の原因であるかどうかはわかりませんが、私の経験は非常に似ていました-約80.000行の大きなサイズのHTMLテーブルを出力しようとすると、TCPDFはページヘッダーを表示しますが、テーブルは表示しません-関連している。この動作は、さまざまなデータセットとさまざまなテーブル構造で同じになります。

何度も試みた後、私は自分のページネーションを追加し始めました-15テーブル行ごとに、ページを分割して次のページに新しいテーブルを追加しました。その時、私は時々、たくさんの完全なページと正しいページの間に空白のページが表示されることに気づきました。そのとき、データの特定のサブセットに問題があるはずだと気づき、エンコーディングの問題を発見しました。あなたが似たようなものを持っていて、TCPDFがあなたの問題が何であるかを明らかにしていなかったのかもしれません。

于 2012-01-10T13:32:02.967 に答える
1

writeHTMLメソッドを使用していますか?

ここでパフォーマンスの推奨事項を確認しました:http ://www.tcpdf.org/performances.php

「大きなHTMLブロックを小さな断片に分割する」と書かれています。

HTMLのブロックが20,000文字を超えると、PDFの生成に2分以上かかることがわかりました。

htmlをブロックに分割し、ブロックごとにwriteHTMLを呼び出すだけで、劇的に改善されました。2分前に生成されなかったファイルは、現在16秒かかります。

于 2012-01-26T16:48:53.073 に答える
0

TCPDFは、PHPでのPDF生成のネイティブ実装のようです。PDFlibのようなコンパイル済みライブラリまたはhtmldocのようなコマンドラインアプリを使用すると、パフォーマンスが向上する場合があります。後者は、大きなPDFを生成する可能性が最も高くなります。

また、出力PDFを複数のページに分割していますか?つまり、TCPDFは単一のHTMLドキュメントを取得して複数のページに分割することを知っていますか、それとも複数のHTMLファイルを生成して単一のPDFドキュメントに結合するのですか?それも役立つかもしれません。

于 2010-08-26T16:33:59.377 に答える
0

ちょうどページネーションのように、PDFをいくつかの部分に分割します。

1)ページ付けされたすべてのHTMLページに[PDFを取得]ボタンを配置し、そのHTMLページからのレコードのダウンロードのみを許可します。

2)ダウンロードできるレコードの最大数を制限します。上限に達した場合は、PDFを分割し、ユーザーが複数のPDFをダウンロードできるようにします。

于 2010-08-26T16:25:08.123 に答える