#javascript #php #codeigniter #pdf
#javascript #php #codeigniter #PDF
Вопрос:
я создаю PDF-файл, используя библиотеку TCPDF. Форма пользователя отправляется с использованием ajax, и PDF-файл генерируется в указанную папку.
$filename= "$name.pdf";
$filelocation = $location
$fileNL = $filelocation."\".$filename;
$this->pdf->Output($fileNL, 'F');
Теперь, на мой взгляд, приведенный выше код получает данные от контроллера, отправленные через ajax, и отвечает за генерацию PDF-файла . PDF генерируется, но я не могу перенаправить страницу после генерации и остаться на той же странице формы.
Я также пробовал перенаправлять JS / Jquery, но не сработало, так как я обнаружил, что заголовки PHP больше не могут быть отправлены, может кто-нибудь посоветовать мне какое-либо решение этой проблемы ,
Мне нужно перенаправить на страницу успеха после генерации PDF
Комментарии:
1. Почему бы вам не сделать это «$this-> pdf-> Output($ fileNL, ‘F’);» в контроллере?
2. код генерации pdf есть в файле просмотра, предоставленном библиотекой TCPDF
3. Поскольку вы сохраняете сгенерированный PDF-файл на сервере, лучшее место для размещения этого кода — в самом контроллере. Это самый простой способ избежать проблемы, с которой вы столкнулись сейчас. После отправки заголовков PHP вы не можете печатать что-либо еще.
4. хорошо, итак, его длинный грязный html-код, который можно увидеть здесь: tcpdf.org/examples/example_003 должен ли я иметь все это в одном контроллере? будет ли это стандартной практикой, и если нет другого sol, я, конечно, не буду возражать против этого
5. Если форма отправляется с использованием AJAX, почему бы не перенаправить пользователя с
location = "some/url";
помощью обратного вызова AJAX success? Добавление заголовка перенаправления в ответ на запрос AJAX все равно ничего не даст.
Ответ №1:
Попробуйте добавить статус в функцию вывода:
$filename= "$name.pdf";
$filelocation = $location
$success_location = '/generated_success.php'; //redirect path after success
$failed_location = '/generated_failed.php'; //redirect path after failed
$fileNL = $filelocation."\".$filename;
$status = $this->pdf->Output($fileNL, 'F');
if($status==true){
redirect($success_location);
}else{
redirect($failed_location);
}