I am trying to convert my html dom into pdf and send that pdf as an attachment with email.
I am using Vue2 in frontend along with html2pdf.js. I am using this to download the dom as pdf and sending the pdf as email attachment. The pdf which is directly downloading is opening correctly but the pdf I am receiving on email is unable to open showing error Failed to load pdf document
on chrome and unable to open document , File type plain text document (text/plain) is not supported
.
This is my html2pdf code on frontend:
let opt = {
margin: 1,
filename: 'summary.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'A4', orientation: 'portrait' }
};
let canvas = document.querySelector("#summary-block");
html2pdf().from(canvas).toPdf()
.output('datauristring')
.then(function (pdfAsString) {
const data = {
pdf: pdfAsString,
emails: this.emails
}
console.log("promise-2-1");
console.log(this.selectedListing);
HTTP.post(`api/listings/${this.selectedListing.id}/share`, data)
.then((response) => {
this.btnLoading = false;
this.tagError = false;
this.emails = ();
})
}.bind(this));
This is my php code in my Laravel controller.
$request = $this->request;
$b64file = trim( str_replace( 'data:application/pdf;base64,', '', $request->pdf ) );
$b64file = str_replace( ' ', '+', $b64file );
$decoded_pdf = base64_decode( $b64file );
if(!empty($request->emails))
{
foreach ($request->emails as $recipient)
{
$user = User::find($recipient("key"));
$__NAME__ = 'User';
$__MAIL_FROM_NAME__ = "Repylot";
$__ADMIN_EMAIL__ = "support@repylot.com";
$search = ('__NAME__', '__MAIL_FROM_NAME__', '__ADMIN_EMAIL__');
$replace = ($__NAME__,$__MAIL_FROM_NAME__, $__ADMIN_EMAIL__);
Mail::to($user)->send(new EmailNotificationWithAttachment($request->pdf, $search, $replace, "offer_summary"));
}
}
and EmailNotificationWithAttachment have handle
return $this->subject($subject)->html($template)->attachData(
$attachment, 'summary.pdf', (
'mime' => 'application/pdf',
));