2015-07-09 2 views
0

Я использую Laravel 4.2Создание Аякса, который показывает PDF - с помощью TCPDF

Совершенно новый Аяксу, и я не знаю, что поставить в .done, чтобы показать PDF.

То, что я написал в методе (отсутствующей переменной HTML ... это довольно большой):

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

    $pdf->SetCreator("Office"); 
    $pdf->SetAuthor('Office'); 
    $pdf->SetTitle('TCPDF Example 061'); 
    $pdf->SetSubject('TCPDF Tutorial'); 
    $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); 

    $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); 

    $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
    $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 

    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 

    $pdf->SetMargins(10, 5, 10); 
    $pdf->SetHeaderMargin(5); 
    $pdf->SetFooterMargin(0); 

    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 

    if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { 
     require_once(dirname(__FILE__).'/lang/eng.php'); 
     $pdf->setLanguageArray($l); 
    } 

    $pdf->SetPrintHeader(false); 
    $pdf->SetPrintFooter(false); 

    $pdf->SetFont('helvetica', '', 10); 

    $pdf->AddPage(); 

    $pdf->writeHTML($html, true, 0, true, 0); 

    $pdf->lastPage(); 

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

То, что я написал в зрения:

$('#btnPrint').click(function() { 
    $.ajax({ 
     url: '{{ route('getPDF') }}', 
     type: 'POST', 
     cache: false, 
     data: {data: html}, 
    }) 
    .done(function(data) { 
     // what should be placed here 
    }) 
    .fail(function() { 
     console.log("error"); 
    }); 

}); 

ответ

0

Этот ответ предполагает, что вы показываете какой-либо значок загрузки при создании PDF:

jQuery не может принимать данные, данные сервером, не отображать и не сохранять файл PDF.

Что вам нужно сделать, это что-то вроде этого:

$('#btnPrint').click(function() { 
    $.ajax({ 
     // This PHP file will generate the PDF and save it to your server 
     // $pdf->Output('path/to/pdf/file.pdf', 'F'); 
     url: 'create_pdf.php', 
     type: 'POST', 
     cache: false, 
     data: {data: html}, 
    }) 
    .done(function(data) { 
     $('#someDiv').html('<iframe src="path/to/pdf/file.pdf"></iframe>'); 
    }) 
    .fail(function() { 
     console.log("error"); 
    }); 

}); 

Этот ответ предполагает, что файл PDF генерирует очень быстро, и вам не нужно, чтобы показать значок загрузки на всех:

$('#someDiv').html('<iframe src="create_pdf.php"></iframe>'); 
+0

Могу ли я просто загрузить его в темп и не сохранять его на сервере? и да, у меня есть значок, который показывает загрузку. –

+0

@EduardIchim Да, вот что показывает второй пример. – MonkeyZeus

Смежные вопросы