I am generating a pdf file and am trying to preview it using stream() as well as attach it to an email.
When I try to stream() the pdf using the code:
function previewPDF(Request $request) {
$pdfData = $this->getPDFData($request);
$domainData = $this->getDomainData($request);
$hourSumData = $this->getHourSumData($request);
$userData = Auth::user();
$pdf = PDF::loadView('trackerPDF', ['pdfData' => $pdfData, 'domainData' => $domainData, 'hourSumData' => $hourSumData, 'userData' => $userData]);
return $pdf->stream("mypdf.pdf");
}
I get the following:
However, it seems that the pdf should be generating correctly as I am able to generate and attach the pdf to an email with no issues using this:
function pdf(Request $request) {
$messages = [
'recipientname.required' => "The Recipient's Name is required field is required.",
'recipientemail.required' => "The Recipient's Email is required field is required.",
'recipientemail.email' => "The Recipient's Email must be a valid email address.",
];
Validator::make($request->all(), [
'recipientemail' => ['required','email'],
'recipientname' => ['required'],
], $messages)->validate();
$pdfData = $this->getPDFData($request);
$domainData = $this->getDomainData($request);
$hourSumData = $this->getHourSumData($request);
$userData = Auth::user();
$pdf = PDF::loadView('trackerPDF', ['pdfData' => $pdfData, 'domainData' => $domainData, 'hourSumData' => $hourSumData, 'userData' => $userData]);
/*Emailing stuff*/
$data["title"] = "Professional Development From ". (string)Auth::user()->name;
$data["body"] = (string)$request->emailmessage;
$data["recipientname"] = (string)$request->recipientname;
$data["toaddress"] = (string)$request->recipientemail;
$data["ccaddress"] = (string)Auth::user()->email;
$data["fromname"] = (string)Auth::user()->name;
$data["credentials"] = str_replace(array("[", "]", "\"", "\\"), "", (string)Auth::user()->designation);
if ( $request->sendtoself) {
Mail::send('emailtemplates.trackeremail', $data, function($message)use($data, $pdf) {
$message->to($data["toaddress"])
->cc($data["ccaddress"])
->subject($data["title"])
->attachData($pdf->output(), "Professional Development Tracker.pdf");
});
} else {
Mail::send('emailtemplates.trackeremail', $data, function($message)use($data, $pdf) {
$message->to($data["toaddress"])
->subject($data["title"])
->attachData($pdf->output(), "Professional Development Tracker.pdf");
});
}
return redirect()->route('tracker')
->with('message', 'Email Sent Successfully.');
}
I am using Jetstream with Interia.js & Vue.js.
Here is my route:
Route::middleware(['auth:sanctum', 'verified'])->post('tracker/preview-pdf',
[DynamicPDFController::class, 'previewPDF']);
And how I am posting the form in the Vue page:
previewPDF() {
this.$inertia.post("/tracker/preview-pdf", this.form);
},
All of the data is loaded the exact same way. I have searched but cannot figure out what I am doing wrong, any help or direction would be appreciated.
