无法在laravel控制器中生成pdf

时间:2017-06-13 02:23:24

标签: laravel laravel-5.3 dompdf

我在laravel控制器中编写了一些示例代码来生成pdf。它得到200响应代码,但pdf没有生成。

以下是我的代码。

function exportPDF() {
    // instantiate and use the dompdf class
    $dompdf = new PDF();
    $dompdf->loadHtml('<h1>hello world</h1>');

    // (Optional) Setup the paper size and orientation
    $dompdf->setPaper('A4', 'landscape');

    // Render the HTML as PDF
    $dompdf->render();

    // Output the generated PDF to Browser
    return $dompdf->stream();
}

但是当我直接在web.php文件中包含路由中的代码时,这是有效的。

Route::get('/generate-pdf', function () {
        $pdf = App::make('dompdf.wrapper');
        $pdf->loadHTML('<h1>Test</h1>');
        return $pdf->stream();
    });

EDITED

web.php

Route::post('/report-audit-export-pdf', 'ReportAuditController@exportPDF');

的.js

window.exportPDF = function() {
  var hidden_category = $('#hidden_category').val();
  $.ajax({
      type: "POST",
      url: '/report-audit-export-pdf',
      data: {

      },
      headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      error: function(jqXHR, textStatus, errorThrown) {
          console.log("jqXHR : " + jqXHR + " and textStatus : " + textStatus + " and errorThrown : " + errorThrown);
      },
      success: function(content) {
        // alert("Success");
      }
  }); 
}

我可以知道问题是什么吗?

1 个答案:

答案 0 :(得分:1)

您无法通过Ajax生成PDF,因为Ajax请求期望响应,Laravel默认将其作为JSON发回。所以你可以做的是制作一个显示PDF的普通GET路线,例如:

<a href="/display-pdf">Display PDF</a>

由于你的ajax没有POST任何数据(你的数据对象为空),你可以绕过你的ajax请求并只使用一个锚

$.ajax({
    type: "POST",
    url: '/data-url',
    data: {},
    success: function(content) {
        window.location.href = '/display-pdf';
    }
}); 

如果由于某种原因,你仍然想使用Ajax,你可以使用像这样的ajax请求的成功响应

strreplace('DJIA', '<span class="color:red">DJIA</span>', $someText);