FPDF: вывод PDF с использованием AJAX

У меня есть файл PHP, в котором я создаю файл PDF с помощью FPDF. Если я выполняю этот файл, он генерирует и загружает файл PDF в браузер. Однако, когда я пытаюсь создать файл PDF с помощью кнопки и с помощью AJAX, он не работает.

Я использую AJAX, так как мне нужно опубликовать некоторые переменные в PHP, чтобы сделать запрос в базе данных перед созданием файла PDF.

Я искал решения в Интернете, но я до сих пор не знаю, как этого добиться.

Я хочу загрузить pdf в браузер, а не скачать

PHP:

$pdf->Output('name.pdf','I');

АЯКС:

var IDDocument = 15;
var Document = 'Invoice';
var ClientID = '205160615';

    $.ajax({  
                type: 'POST', 
                url: 'PDF.php',  
                data: { IDDocument:IDDocument, 
                        Document:Document,  
                        ClientID:ClientID, 
                        btnPDF:'btnPDF'},
                success: function(data) {
                    //load PDF on browser.
                }
            });

            return false;

Будет ли PDF-файл загружаться браузером автоматически, практически во всех случаях зависит от пользователя. Если вы используете опцию вывода string fPDF ($ourpdf->Output('S')), вы можете установить заголовки и отправить вместе с PDF-файлом.

Dave 11.06.2019 22:17

Это не работает

Roly 11.06.2019 22:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
1 536
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете перенаправить браузер (в случае успеха) на сгенерированный файл PDF. URL-адрес может быть получен через ответ ajax.

Пример:

$.ajax({  
    type: 'POST', 
    url: 'PDF.php',  
    data: { IDDocumento:IDDocumento, 
            TipoDocumento:TipoDocumento,  
            CedulaCliente:CedulaCliente, 
            btnPDF:'btnPDF'
    },
    success: function(data) {
        // redirect to the generated pdf file
        window.location = data.url;
    }
});

URL-адрес файла PDF должен быть сгенерирован на стороне сервера (в PHP).

<?php
// pdf.php

// Generate PDF here
// ...

// Generate url
// Use an UUID to make sure that nobody can guess the url
$url = 'filename-with-uuid.pdf';

// Send json response
header('Content-Type: application/json');
echo json_encode(['url' => $url]);

Но как мне получить URL-адрес созданного PDF-файла?

Roly 11.06.2019 22:05

URL-адрес должен быть сгенерирован на стороне сервера (в PHP).

odan 11.06.2019 22:17
Ответ принят как подходящий

Вот что я в итоге сделал:

Я решил использовать JQuery для отправки POST в PHP-файл следующим образом:

function f()
    {
        //Variables I needed to POST to PHP

        var IDDocument = 15;
        var Document = 'Invoice';
        var ClientID = '205160615';

        //POST to PHP using JQUERY

        $.post('PDF.php'{
                         IDDocument:IDDocument, 
                         Document:Document,
                         ClientID:ClientID,
                         btnPDF:"btnPDF"//btnPDF is just to check if user clicked the button
                         }, 

                         function() //this function is to call the PHP File a second time
                         {
                            window.open('PDF.php');
                         });

    }

Затем в файле PHP я решил сохранить переменные, отправленные в переменных $_SESSION, после того, как убедился, что пользователь нажал кнопку, используя условие if. И затем, когда файл PHP вызывается во второй раз, поскольку пользователь не нажал кнопку, я проверил это, используя else для создания и загрузки файла PDF на этот раз. Поскольку у меня есть переменные, ранее сохраненные в переменных $_SESSION, я просто использовал их для загрузки файла PDF, а затем отключил их.

это код в файле PHP:

if (isset($_POST['btnPDF'])) //Check if user clicked the button
{
   //If the user clicked the button, store the variables in $_SESSION variables         

    $_SESSION["IDDocument"]=$_POST['IDDocument'];
    $_SESSION["Document"]=$_POST['Document'];
    $_SESSION["ClientID"]=$_POST['ClientID'];
}
else
{
   //the second time the PHP file is called, the user didn't clicked the button.
   //This second time I use the $_SESSION variables previously stored in the first
   //call to the PHP file in order to create and load the PDF file

    //asign $_SESSION variables to PHP variables if you want to

    $IDDocument=$_SESSION["IDDocument"];
    $Document=$_SESSION["Document"]; 
    $ClientID=$_SESSION["ClientID"];

    //unset the $_SESSION variables

    unset($_SESSION["IDDocument"],$_SESSION["Document"],$_SESSION["ClientID"]);

    //Create and load the PDF file
}

вот что я в итоге сделал:

$.post(ajaxurl,data,function(html, response){
      $(responsediv).html(html)
}

затем на стороне php я просто ответил эхом и iframe с URL-адресом набора файлов PDF

$_SESSION['data']=$_POST['data']
echo <iframe src=pdf.php style = "width:100%;height:100vh"

а затем, наконец, в pdf.php

у меня есть код генерации pdf

$pdf->Output('name.pdf',I);

Другие вопросы по теме