【问题标题】:Unable to generate pdf in laravel controller无法在 laravel 控制器中生成 pdf
【发布时间】:2017-11-14 15:16:13
【问题描述】:

我已经编写了一些示例代码来在我的 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();
    });

已编辑

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");
      }
  }); 
}

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

【问题讨论】:

  • 所以它与你的路由和控制器函数名称有关。使用控制器时显示您的初始路线。
  • @EddyTheDove 我编辑了我的帖子。看看吧。谢谢!
  • 你是通过 ajax 创建 pdf ..?
  • @AlankarMore ,是的,我将数据发布到控制器,让控制器生成pdf。这是错的吗?如果是的话,最好的方法是什么?
  • 控制器将通过 ajax 创建您的 PDF,但为了呈现,请保存您的 pdf 某个位​​置并返回该生成文件的名称。渲染后将用户重定向到其他路由,传递生成的 PDF 名称以显示 PDF 内容。简而言之,您必须在通过 Ajax 创建 PDF 后直接通过浏览器访问它

标签: laravel laravel-5.3 dompdf


【解决方案1】:

您不能通过 Ajax 生成 PDF,因为 Ajax 请求需要响应,Laravel 默认将响应作为 JSON 发送回。因此,您可以做的是创建一条显示 PDF 的普通 GET 路线,例如:

Route::get('display-pdf', 'ReportAuditController@exportPDF');

由于您的 ajax 不发布任何数据(您的数据对象为空),您可以绕过您的 ajax 请求并简单地使用锚

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

如果出于某种原因,您仍想使用 Ajax,您可以像这样使用来自 ajax 请求的成功响应

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

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2011-11-29
    相关资源
    最近更新 更多