ShutyA1488
@ShutyA1488

При AJAX запросе, не скачивается PDF файл (FPDF)?

Со стороны Пользователя передаются данные на сервер с помощью AJAX, на сервере генерируется PDF с переданными значениями, запрос отрабатывает, но вот сам файл PDF не скачивается, хотя когда переходишь на него прописав URL серверного файла, то он скачивается, но уже как вы понимаете без переданных файлов( Использую встроенные класс в PHP, "FPDF"
let obj = {
    name: "Roma",
    secondName: "Ishutin",
    year: "21"
};
const url = "pdf.php";
let button = document.querySelector("#button");

button.addEventListener("click", () => {
    fetch(url, {
        method: "POST",
        body: JSON.stringify(obj),
        headers: {
            "Content-type": "application/json"
        }
    });
});


$serverObj = $_POST;
$serverObj = json_decode(file_get_contents("php://input"), true);

$name = $serverObj["name"];
$secondName = $serverObj["secondName"];
$year = $serverObj["year"];

require("fpdf-utf8/tfpdf.php");

$pdf = new tFPDF();
$pdf->AddPage();
// Add a Unicode font (uses UTF-8)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->SetFont('DejaVu','',14);

////////////////////////////////////////////////////////////////////

$pdf->SetAuthor("Tonator");
$pdf->SetTitle("Price");

$pdf->SetDisplayMode('real','default');
$pdf->Image('logo.png',69,11,71,12,'png', 'http://www.fpdf.org/');

$pdf->SetXY(10,30);
$pdf->SetFontSize(14);
$pdf->Write(14,'Имя: ');
$pdf->Write(14,$name);

$pdf->SetXY(10,40);
$pdf->SetFontSize(14);
$pdf->Write(14,'Фамилия: ');
$pdf->Write(14,$secondName);

$pdf->SetXY(10,50);
$pdf->SetFontSize(14);
$pdf->Write(14,'Годиков: ');
$pdf->Write(14,$year);

$result = $pdf->Output('example1.pdf','D');
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Mellorn
Через ajax скачать файл нельзя.
Возвращайте в ответе url для скачивания и направляйте юзера на этот url.

Технически можно реализовать вашу задумку. Всё сводится к тому, чтобы вернуть в ответе файл в виде blob. Дальше создать из него url. что-то вроде:
URL.createObjectURL(blob)
Создать ссылку, в качестве значения href указать созданный url. И программно кликнуть по ней.
Но IMHO это костыльненько как-то.
Ответ написан
ShutyA1488
@ShutyA1488 Автор вопроса
Если кому-то это интересно, то у меня получилось это реализовать с помощью BLOB. Как и говорил Mellorn
let obj = {
    name: "Roma",
    secondName: "Ishutin",
    year: "21"
};
const url = "pdf.php";
let button = document.querySelector("#button");

button.addEventListener("click", () => {
    fetch(url, {
        method: "POST",
        body: JSON.stringify(obj),
        headers: {
            "Content-type": "application/json"
        }
    })
        .then(response => response.blob())
        .then(function (blob) {
            let a = document.createElement('a');
            a.className = "link";
            a.innerHTML = "Скачать";
            a.href = URL.createObjectURL(blob);

            document.body.append(a);
        });
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы