0

私は、ユーザーが PHP と MYSQLi を介して自分の日記エントリを DB に保存するオンライン ジャーナル/日記サイトを持っています。

メニュー リンクをクリックするだけで、ユーザーがすべてのエントリを PDF ファイルに保存できる機能を追加したいと考えています。

これを行う最善の方法は何ですか?私はDOMPDFを調べましたが、簡単で有望に思えましたが、それを機能させるには数日かかり、他のソリューションを検討する準備ができています.

おそらく多くの解決策があり、それを見つけるためだけに 3 日間を費やしたくありません。

更新 私はdompdfを機能させることができました.それはかなり簡単でうまく機能します. 私が遭遇した問題は、大量の HTML をレンダリングしようとするとクラッシュすることです。コードのメモリの問題のようです (Google コンセンサス)。例えば。私のDBには603のレコードがあり、各レコードには約2段落のテキストしかありません。私にとって、これは MYSQL DB の観点から言えば、大したことではありません。

Apache をクラッシュさせずに最大約 400 レコードを読み取れるように、最大​​タイムアウト設定を 320 秒に増やす必要がありました。SQL ステートメントに LIMIT 400 を追加すると、約 300 秒かかり、PDF ファイルが表示されます (長すぎて妥当ではありません)。LIMIT を 450 に増やすと、Apache がクラッシュします。Apacherエラーは、メモリの上書きなどに関連するものでした。したがって、400レコードが返されるまではかなりうまく機能し、レンダリングフェーズでは、遅くなり、約450レコードでクラッシュします。

私がグーグルで調べたところ、同様の問題を抱えている人がたくさん見つかったので、これは事実のようです。これは DOMPDF が知っていて、FAQ や修正で言及しているように見えますが、そうではありません。だから私はまだPDFオプションが大好きですが。ユーザーがデータをテキスト ファイルとして保存できるようにすることにしました。これは非常に単純な PHP コーディング (5 行) で、データをファイルとして即座に保存します。

データをテキスト ファイルに保存するコードの要点は次のとおりです。

$myFile = "pdjentries.txt";
$fo = fopen($myFile, 'w') or die("can't open file");

            $data = "ALL Your Entries from PersonalDreamJournal.com\r    \n\r\n\r\n";

           while ($row = $Recordset1->fetch_assoc() )
            { 

                 $data .= date("m-d-Y", strtotime($row['date'])).'          '.$row['flag']. "\r\n";                       
                 $data .= $row['text']. "\r"; 
                 $data .= "****************************************************************";
                 $data  .= "\r\n\r\n\r\n\r\n\r\n";                  ;

            } //end while
                    $data .='----END OF ALL ENTRIES-----';


header('Content-type: application/txt');
header('Content-Disposition: attachment; filename="pdj-entries.txt"');
echo $data;
4

1 に答える 1

1

情報をクライアントに送信してから、クライアント側でjsPDFを使用して pdf をレンダリングできます。使い方はとても簡単です。

于 2013-09-16T17:21:40.777 に答える