У меня есть сценарий, использующий пакет html2pdf. Это хорошо работает. Он создает многостраничный PDF-файл с изображениями.
Содержимое PDF-файла — это данные, которые извлекаются из категории WordPress (с помощью запроса wp), в результате чего в PDF-файл помещается 3–6 сообщений.
Например, HTML:
Код: Выделить всё
PDF tile
[img]https://styles.redditmedia.com/t5_2r5i1/styles/communityIcon_x4lqmqzu1hi81.jpg?width=256&s=fc15e67e2b431bbd2e93e980be3090306b78be55[/img]
Page 2 title
Some text
Page 3 title
Some text
Код: Выделить всё
jQuery(function($) {
window.onload = function() {
let el = document.getElementById('PDFcontent');
var title = $('.exhibitied-title').text();
let opt = {
margin: 0.2,
filename: title + '.pdf',
image: {
type: 'jpeg',
quality: 0.99
},
html2canvas: {
scale: 2,
logging: true,
dpi: 192,
letterRendering: true,
/* useCORS: true*/
},
jsPDF: {
unit: 'mm',
format: 'a4',
orientation: 'portrait'
}
};
html2pdf().set(opt).from(el).toPdf().output('datauristring').save().then(function(pdfAsString) {
title = $('.exhibitied-title').text();
filetitle = title + '.pdf';
let data = {
'action': 'send_email_with_pdf',
'fileDataURI': pdfAsString,
'filetitle': filetitle,
}
$.post(myAjax.ajaxurl, data, function(response) {
console.log(response);
});
});
}
});
Но когда дело доходит до сохранения или отправки PDF-файла по электронной почте, я получаю проблемы.
Электронное письмо отправляется и создается PDF-файл. Однако PDF-файл в электронном письме имеет размер 115 байт и просто говорит: «Не удалось загрузить PDF-документ». когда вы пытаетесь открыть его, а PDF-файл, сохраненный в моей папке загрузок WP, имеет размер 0 байт, а также «Не удалось загрузить PDF-документ». показывает.
Внутри моего файла function.php у меня есть
Код: Выделить всё
function send_email_with_pdf() {
$pdfdoc = $_POST['fileDataURI'];
$b64file = trim( str_replace( 'data:application/pdf;base64,', '', $pdfdoc ) );
$b64file = str_replace( ' ', '+', $b64file );
$decoded_pdf = base64_decode( $b64file );
//file_put_contents( $attachment, $decodPdf );
$upload_dir = wp_upload_dir();
$image_data = file_get_contents( $decoded_pdf );
$filename = $_POST['filetitle'];
if ( wp_mkdir_p( $upload_dir['path'] ) ) {
$file = $upload_dir['path'] . '/' . $filename;
}
else {
$file = $upload_dir['basedir'] . '/' . $filename;
}
file_put_contents( $file, $image_data );
$mail = new PHPMailer;
$mail->setFrom( '[email protected]', 'My name' );
$mail->addAddress( '[email protected]', 'your name' );
$mail->Subject = 'Subject';
$mail->Body = $filename;
$mail->addStringAttachment($decoded_pdf, $filename);
$mail->isHTML( false );
if( !$mail->send() ) {
$response = 'Message was not sent.';
$response .= 'Mailer error: ' . $mail->ErrorInfo;
}
else {
$response = 'Message has been sent.';
}
wp_send_json( $response );
}
add_action( 'wp_ajax_send_email_with_pdf', 'send_email_with_pdf' );
add_action( 'wp_ajax_nopriv_send_email_with_pdf', 'send_email_with_pdf' );
Я разместил столько информации, сколько Могу, но дайте мне знать, если вам понадобится дополнительная информация.
Подробнее здесь: https://stackoverflow.com/questions/735 ... orrupt-pdf