簡體   English   中英

如何在laravel中以pdf格式發送刀片作為附件?

[英]How to send blade as attachment in pdf format in laravel?

我想用 laravel 將刀片文件作為附件發送到郵件中。 我正在為此編寫下面的代碼,但它不起作用。

下面是我的控制器,我從表單獲取數據,然后將這些數據發送到另一個控制器,在那里我的附件函數被調用。

$data = array('shareholders'=>$request->com_shareholder_count,'contract_send'=>$request->contract_send);
$to = $mail_log->to_email_id = $request->email_id;
$mail = Mail::to($to)->send(new SendMailable($data));

這是我的 SendMailable 控制器:

$director_info_pdf = view('directors_info',compact('data'))->render();

返回此變量時,它向我顯示錯誤:

message: "Invalid view.", exception: "InvalidArgumentException",…}
exception: "InvalidArgumentException"
file: "C:\xampp\htdocs\caps_admin\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php"
line: 285
message: "Invalid view."

在這一行之后,我正在編寫代碼來附加我的文件。 我正在發送一些文件,其他 3 個文件直接從文件夾發送。 最后一個是從刀片文件中附加的。

->attachdata($director_info_pdf, 'dynamic_data.pdf')
        ->attach( $public_path.'/'.'contract.pdf', [
                        'as' => 'contract.pdf',
                        'mime' => 'application/pdf',
                    ])
        ->attach($public_path.'/'.'HMRC.pdf',[
                        'as' => 'HMRC.pdf',
                        'mime' => 'application/pdf',
                    ])
         ->attach($public_path.'/'.'clientR3.pdf',[
                        'as' => 'contract1.pdf',
                        'mime' => 'application/pdf',
                    ]);

我可以將所有 4 個文件作為附件發送郵件。 但是當我嘗試在郵件中打開我的文件時,其余 3 個文件正在以 pdf 格式運行。 但是->attachdata($director_info_pdf, 'dynamic_data.pdf')這個文件被破壞了。

我不知道如何先將此文件更改為 pdf,然后作為附件發送。 我正在為 pdf 使用 snappy。

我認為您想將 pdf 作為附件發送到您的電子郵件中而不將其保存在您的系統中。

您可以參考以下代碼來執行此操作。

public function sendmail()
{
        $data["email"]='useremail@gmail.com';
        $data["client_name"]='user_name';
        $data["subject"]='sending pdf as attachment';

        //Generating PDF with all the post details

        $pdf = PDF::loadView('userdata');  // this view file will be converted to PDF

        //Sending Mail to the corresponding user

        Mail::send([], $data, function($message)use($data,$pdf) {
        $message->to($data["email"], $data["client_name"])
        ->subject($data["subject"])
        ->attachData($pdf->output(), 'Your_Post_Detail.pdf', [
                   'mime' => 'application/pdf',
               ])
        ->setBody('Hi, welcome user! this is the body of the mail');
        });
}

希望對你有幫助。

為了更好地理解你可以按照這篇文章

如何在laravel的電子郵件中將pdf作為附件發送

我不知道如何先將此文件更改為 pdf,然后作為附件發送。 我正在為 pdf 使用 snappy。

所以這就是問題所在。 您正在附加一個 HTML 文件,並簡單地將其命名為 PDF。 那行不通。 您確實需要從您呈現的 HTML 視圖中生成此 PDF。

這是 snappy 的文檔:

https://github.com/barryvdh/laravel-snappy#usage

我建議你仔細閱讀它,因為那里給出的例子非常簡單易懂。

這是未經測試的,但如果您根據您的代碼正確設置了 Snappy ,則應該可以執行以下操作:

$snappy = App::make('snappy.pdf');
$director_info_pdf = $snappy->getOutputFromHtml(view('directors_info',compact('data'))->render());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM