2017-01-13 12 views
1

StackOverflowで見つけようとしましたが、Googleにも試みましたが、関連する回答は見つかりませんでした。Laravel PDFをグラフで生成してメールで送信します。

グラフ/グラフを含むPDFを使用して、Laravelアプリケーションのユーザーに月次レポートを送信したいと考えています。

これは、それがすでにルートを作成し

  1. に行われているものであるprintControllerで

    Route::get('/print/', '[email protected]'); 
    
  2. はDBから必要なすべてのデータを取得し、返却されたレポート機能を作成したと言うことができますユーザーデータを含むビュー

    return view::make('monthly_report', $user_data); 
    
  3. monthly_reportビューでは、すべてのユーザーデータを取得し、ビューを表示し、データを含むグラフを作成します。チャートはCharts.jsで作成されます。それはキャンバスにあります。

  4. Ajaxを使用して、生成されたグラフをイメージとしてサーバーに送信します。 、印刷制御部、saveChart関数で経路

    Route::post('print/save', '[email protected]'); 
    
  5. を保存

    $data = base64_decode($data); 
    //save chart on server 
    file_put_contents("Charts/".$fileName, $data); 
    
  6. が次に別のビューmonthly_report2を使用してPDFレポートを作成するチャートを保存作成例えば

    var canvas = document.getElementById("myChart"), // Get your canvas 
    imgdata = canvas.toDataURL(); 
    file_name = "<?php echo $chart_file_name; ?>"; //created with userId and date 
    //send it to server 
    $.ajax({ 
        method: "POST", 
        url: "save", 
        data: { 
        data: imgdata, 
        file_name: file_name, 
        _token: token, 
    } 
    }); 
    
  7. 、それはsaveChart関数にもあります。ビューmonthly_report2は、任意のJavaScriptを使用してmonthly_reportによって生成されたチャート画像を使用して、数6

    $pdf = \PDF::loadView('monthly_report2', $cll_data); 
    file_put_contents("reports/".$pdf_name, $pdf->output()); 
    

にこれは、サーバー上で生成されたPDFを保存しません。ここまでは順調ですね。

これらのPDFレポートを電子メールでユーザーに送信するには、特定の日付に毎月実行されるスケジュール/クローンジョブを作成し、PDFレポートを添付した電子メールを送信します。

わかりやすくするためにいくつかの詳細を省略します。詳細については、お問い合わせください。

は、これまでお読みいただきありがとうございました、今私は2つの質問

  1. を持っている私がやっている方法が良いですかそれは改善することができますか?

  2. このプロセスはすべて自動的に必要です(レポートの生成と電子メールによる送信)。 PDFを生成するには、monthly_reportビューを読み込む必要がありますか? Chartを生成してサーバーに送信します。自動的にpdfレポートを生成するようにスケジュールすることもできますか?いいえ、それを行う方法はありますか?

答えて

2

大きな問題の種類が、私はそれが良いことだと思う

  1. にお答えしようとするでしょう。私はチャートを作成するためにJavaScriptを使用することの大ファンではありませんが、それは私です。あなたは明らかにあなたがやっていることを知っていますし、PDF生成は私の経験では「機能すれば、それを壊さないでください」という機能です。

  2. これはもっと難しいと思います。 JavaScriptを使ってチャートを作成しているので、ブラウザを開いて手動で行うことなく、JavaScriptを解析し実際にチャートを作成するためのエンジンが必要です(NodeJSが気になります)。 (これが、私がJavaScriptを使ってチャートを作成するのが好きではない理由です)。 this oneのようなチュートリアルを見て、グラフのサーバーサイドをレンダリングする方法を知ることができます。

    その後、Laravel task scheduler(Laravel 5をご利用の場合はcommunity packageがLaravel 4の場合)をご覧ください。実行する既存およびカスタムメイドのコマンドをスケジュールできます。擬似コードでは、PDF生成コマンドは次のようになります。

    public function createAndSendCharts() { 
    
        // 1. Get necessary user data 
        // 2. Create your charts 
        // 3. Save your charts 
        // 4. Create email with charts 
        // 5. Send your email 
    
    } 
    

    を次に、あなたのタスクスケジューラ

    $schedule->command('send:charts') 
         ->monthly(); 
    

にその機能を追加することができ、これはいくつかの助けであったと思います。つまり、あなたはうまくやっていますが、プロセス全体を自動化したい場合、ChartJSの選択はいくつかの結果をもたらします。本当に特別なものはありません。多くのチュートリアルがこの状況のた​​めに存在します:)

+0

まず、私の質問を読んで答えてください。私はサーバー側でチャートをレンダリングするためのチュートリアルに進みます。私は、node.jsとjsdomを使って動的なグラフを生成するのはちょっと複雑なことだと思います。あなたが提供した他のすべての情報は素晴らしいです。ありがとう房: – qammar

+0

何も問題がなければ、問題はないかもしれないが、多分upvoteできますか?チャートの自動生成が必須の場合は、常にhttps://packagist.org/packages/amenadiel/jpgraphのような専用サーバーサイドチャートジェネレータを調べることができます。これらのジェネレータは、簡単に電子メールに入れて送信できるイメージを作成します。 – Loek

関連する問題