Проблема сохранения файла PDF с использованием TCPDF - PullRequest
1 голос
/ 28 марта 2019

Я хочу сохранить HTML-файл в pdf файл одним нажатием кнопки. Проблема в том, что я получаю проблему после ajax вызова:

% PDF-1.7% 8 0 obj << / Тип / Страница / Родительский 1 0 R / LastModified (D: 20190328213806 + 02'00 ') / Ресурсы 2 0 R / MediaBox [0.000000 0,000000 595,276000 841,890000] / CropBox [0,000000 0,000000 595,276000 841,890000] / BleedBox [0,000000 0,000000 595,276000 841,890000] / TrimBox [0,000000 0,000000 595,276000 841,890000] / ArtBox [0,0000 0.000000 595.276000 841.890000] / Содержание 9 0 R / Повернуть 0 / Группа << / Тип / Группа / S / Прозрачность / CS / DeviceRGB >> / Аннотации [6 0 R 7 0 R ] / PZ 1 >> endobj 9 0 obj <> stream x ۏ q | `ⱯVU} е) .erI66 $ ^ $ d3 ] Эйб "Ig ΙKwU |? GYS | ро ߿ Gvqy |] H ȄQFDSF @. '} е8 B @ UH @ MMCgP8g [т? Р # @ Е = Pg KysLm.0qC {[} TlgkY? 3K9g% Mq = 0vwG} Обь ڃ л / туалет | Ойю;? ݽ л ? _QŁJG ׇ ~ а К ^ г -!, L3 -ZeW 1D AI # s

Я нашел подобную проблему здесь - Tcpdf на контроллере Laravel 3

Но я не знаю, что такое Response::make? Есть идеи как это исправить? Спасибо.

Код:

JQuery / Ajax

$(document).on("click", "#testButtonClick", function() {
   savePDF($("#test").html(), "Test1", "Test2");
 });

function savePDF(info, name, data) {
$.ajax({
    type: "post",
    url: "includes/worker",
    data: {"test": info, "name": name, "data": data},
    xhr: function() {
        try {
            if (window.ActiveXObject) {
                return new window.ActiveXObject("Microsoft.XMLHTTP");
            }
        } catch(e) { }

        return new window.XMLHttpRequest();
    },
    success: function(result) {
        console.log(result);
    },
    error: function(response) {
    }
}); 
}

PHP

    require_once("tcpdf.php");
    $pdfData = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false);  //
    $pdfData->SetCreator("Test..");  
    $pdfData->SetTitle("Test..");  
    $pdfData->SetHeaderData("", "", PDF_HEADER_TITLE, PDF_HEADER_STRING);  
    $pdfData->setHeaderFont(Array(PDF_FONT_NAME_MAIN, "", PDF_FONT_SIZE_MAIN));  
    $pdfData->setFooterFont(Array(PDF_FONT_NAME_DATA, "", PDF_FONT_SIZE_DATA));  
    $pdfData->SetFooterMargin(PDF_MARGIN_FOOTER);  
    $pdfData->SetMargins(PDF_MARGIN_LEFT, "5", PDF_MARGIN_RIGHT);  
    $pdfData->setPrintHeader(false);  
    $pdfData->setPrintFooter(false);  
    $pdfData->SetAutoPageBreak(true, 10);  
    $pdfData->setFontSubsetting(true);
    $pdfData->AddPage();
    $pdfData->SetFont("freeserif", "", 10);
    $pdfData->writeHTML(iconv("Windows-1251", "UTF-8", "Это тест...."));  
    $pdfData->Output("Test.pdf", "D");

1 Ответ

0 голосов
/ 29 марта 2019

Итак, я исправил это с помощью автоматической формы JS и экранированных символов, таких как ".

Код:

    var pdfForm = $("<form action=\"includes/worker\" method=\"post\" enctype=\"multipart/form-data\" target=\"_blank\"></form>");
      pdfForm.append("<input type=\"hidden\" name=\"test\" value=\"" + htmlValidation($("#test").html()) + "\">");
      pdfForm.append("<input type=\"hidden\" name=\"name\" value=\"Test1\">");
      pdfForm.append("<input type=\"hidden\" name=\"data\" value=\"Test2\">");
      $("body").append(pdfForm);
      $(pdfForm).submit();

   function htmlValidation(data) {
     return data
       .replace(/&/g, "&amp;")
       .replace(/</g, "&lt;")
       .replace(/>/g, "&gt;")
       .replace(/"/g, "&quot;")
       .replace(/'/g, "&#039;");
   }
...