gpt4 book ai didi

php - 在php中从html ajax表单创建PDF文件

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:30 24 4
gpt4 key购买 nike

我有一个简单的联系表。它通过 AJAX 发送电子邮件。工作正常。

现在我需要根据此表单的结果创建 PDF 文件并将其下载给用户,如 here

所以html形式:

<form id="contact-form">
<input type="hidden" name="action" value="contact_send" />
<input type="text" name="name" placeholder="Your name..." />
<input type="email" name="email" placeholder="Your email..." />
<textarea name="message" placeholder="Your message..."></textarea>
<input type="submit" value="Send Message" />
</form>

在 functions.php 中我有发送电子邮件的功能:

function sendContactFormToSiteAdmin () {

try {
if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
throw new Exception('Bad form parameters. Check the markup to make sure you are naming the inputs correctly.');
}
if (!is_email($_POST['email'])) {
throw new Exception('Email address not formatted correctly.');
}

$subject = 'Contact Form: '.$reason.' - '.$_POST['name'];
$headers = 'From: My Blog Contact Form <contact@myblog.com>';
$send_to = "contact@myblog.com";
$subject = "MyBlog Contact Form ($reason): ".$_POST['name'];
$message = "Message from ".$_POST['name'].": \n\n ". $_POST['message'] . " \n\n Reply to: " . $_POST['email'];

if (wp_mail($send_to, $subject, $message, $headers)) {
echo json_encode(array('status' => 'success', 'message' => 'Contact message sent.'));
exit;
} else {
throw new Exception('Failed to send email. Check AJAX handler.');
}
} catch (Exception $e) {
echo json_encode(array('status' => 'error', 'message' => $e->getMessage()));
exit;
}


}
add_action("wp_ajax_contact_send", "sendContactFormToSiteAdmin");
add_action("wp_ajax_nopriv_contact_send", "sendContactFormToSiteAdmin");

所以在 footer.php 中我有一个脚本 ajax 处理程序:

jQuery(document).ready(function ($) {
$('#contact-form').submit(function (e) {
e.preventDefault(); // Prevent the default form submit
var $this = $(this); // Cache this
$.ajax({
url: '<?php echo admin_url("admin-ajax.php") ?>', // Let WordPress figure this url out...
type: 'post',
dataType: 'JSON', // Set this so we don't need to decode the response...
data: $this.serialize(), // One-liner form data prep...
beforeSend: function () {},
error: handleFormError,
success: function (data) {
if (data.status === 'success') {
handleFormSuccess();
} else {
handleFormError(); // If we don't get the expected response, it's an error...
}
}
});
});
});

一切都很好。但我不明白我必须在哪里粘贴创建 PDF 的代码,我试图将它粘贴到 sendContactFormToSiteAdmin php 函数中,但没有成功。

this example我需要将这段代码准确地粘贴到 sendContactFormToSiteAdmin php 函数中:

ob_start();
?>

<h1>Data from form</h1>
<p>Name: <?php echo $name;?></p>
<p>Email: <?php echo $email;?></p>

<?php
$body = ob_get_clean();
$body = iconv("UTF-8","UTF-8//IGNORE",$body);
include("mpdf/mpdf.php");
$mpdf=new \mPDF('c','A4','','' , 0, 0, 0, 0, 0, 0);
$mpdf->WriteHTML($body);
$mpdf->Output('demo.pdf','D');

但我不明白如何使用 ajax 响应来做到这一点。

编辑正如 Shoaib Zafar 评论的那样,如果可以将 pdf 文件作为电子邮件附件通过电子邮件发送,对我来说当然是最好的。

最佳答案

要将 PDF 作为附件通过电子邮件发送,您需要更改电子邮件发送功能。

function sendContactFormToSiteAdmin () {

try {
if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
throw new Exception('Bad form parameters. Check the markup to make sure you are naming the inputs correctly.');
}
if (!is_email($_POST['email'])) {
throw new Exception('Email address not formatted correctly.');
}

ob_start();
?>
<h1>Data from form</h1>
<p>Name: <?php echo $_POST['name'];?></p>
<p>Email: <?php echo $_POST['email'];?></p>
<?php
$body = ob_get_clean();
// Supposing you have already included ("mpdf/mpdf.php");
$mpdf=new \mPDF('c','A4','','' , 0, 0, 0, 0, 0, 0);
$mpdf->WriteHTML($body);
$pdf_content = $mpdf->Output('', 'S');
$pdf_content = chunk_split(base64_encode($pdf_content));
$uid = md5(uniqid(time()));
$filename = 'contact.pdf';

$subject = 'Contact Form: '.$reason.' - '.$_POST['name'];
$message = "Message from ".$_POST['name'].": \n\n ". $_POST['message'] . " \n\n Reply to: " . $_POST['email'];
$header = 'From: My Blog Contact Form <contact@myblog.com>';

$header .= "--".$uid."\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $pdf_content."\r\n\r\n";
$header .= "--".$uid."--";

$send_to = "contact@myblog.com";
$subject = "MyBlog Contact Form ($reason): ".$_POST['name'];

if (wp_mail($send_to, $subject, $message, $header)) {
echo json_encode(array('status' => 'success', 'message' => 'Contact message sent.'));
exit;
} else {
throw new Exception('Failed to send email. Check AJAX handler.');
}
} catch (Exception $e) {
echo json_encode(array('status' => 'error', 'message' => $e->getMessage()));
exit;
}


}

我不太了解 wp_email 函数是如何工作的,但从技术上讲这段代码应该可以工作,你只需要重构它。您也可以在官方文档中找到它以了解更多信息 mPDF Example #3

关于php - 在php中从html ajax表单创建PDF文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com