Создание PDF через AJAX с использованием mpdf

Я использую библиотеку mpdf для создания PDF-файла с пользовательским HTML-кодом. Я могу успешно сохранить PDF-файл на сервере, но я хочу, чтобы PDF-файл открывался в браузере для пользователя. Я пытался использовать параметры вывода mpdf, чтобы открыть файл в браузере или запросить загрузку, но ничего не происходит, когда я использую AJAX для отправки html-данных в сценарий.

Вот мой АЯКС:

$('#save').click(function() {

        var shelf_clone = $('#shelf').clone();
        var shelf = shelf_clone.prop('outerHTML'); 

        $.ajax({
            type: "POST",
            url: "pdf.php",
            data: { html:shelf },
            success: function(response)
            {
                $('#status').html('File Saved Successfully');
            },
        })

    });

Вот мой скрипт для создания PDF:

<?php

include_once('/mpdf/mpdf.php');

$html = $_POST['html'];

$mpdf=new mPDF();
$stylesheet = file_get_contents('css/print.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html,2);
$mpdf->Output('shelf.pdf', I);

exit;

?>

Я использую AJAX, чтобы можно было создать PDF-файл, не уходя со страницы. Есть ли ошибка в моем коде или я должен использовать другой подход?


person C. Cahill    schedule 01.04.2014    source источник
comment
некоторые браузеры не видят pdf файл. Они предложат пользователю вариант загрузки. См. helpx.adobe.com/acrobat/using/< /а>   -  person Sajitha Rathnayake    schedule 01.04.2014


Ответы (2)


Чтобы указать браузеру, что файл следует просматривать в браузере

Content-Type: application/pdf
Content-Disposition: inline; filename.pdf

Чтобы файл загружался, а не просматривался

Content-Type: application/pdf
Content-Disposition: attachment; filename.pdf

<meta http-equiv="Content-Type" content="application/pdf; charset=utf-8">  

Или используя php

header('Content-Type: application/pdf'); 
header('Content-Description: inline; filename.pdf'); 
person Sajitha Rathnayake    schedule 01.04.2014
comment
Благодарю за ваш ответ. Не могли бы вы уточнить, где я добавляю их в свой код? Я попытался добавить их к данным html, отправленным через ajax, но это не повлияло. - person C. Cahill; 01.04.2014
comment
@SajithaNilan, как это сделать с помощью ajax? - person Pathik Vejani; 24.02.2016
comment
@Pathik Vejani Вы пытались отправлять заголовки с помощью Ajax? - person Sajitha Rathnayake; 24.02.2016
comment
@SajithaNilan, как это сделать? - person Pathik Vejani; 24.02.2016
comment
Ответ неполный. Пожалуйста, правильно укажите, где и как следует добавить код. - person trusha; 06.11.2019

В итоге я не использовал AJAX и вместо этого добавил скрытый ввод в форму и заполнил ее, используя следующий скрипт:

$('#save').click(function() {

    event.preventDefault();

    var shelf_clone = $('#shelf').clone();
    var shelf = shelf_clone.prop('outerHTML');

    $('#save_shelf input[name=shelf]').val(shelf);

    $('#save_shelf').submit();

});
person C. Cahill    schedule 01.04.2014