【问题标题】:Multi-page pdf using barryvdh dompdf Laravel-4 and loadView rather than loadHtml使用 barryvdh dompdf Laravel-4 和 loadView 而不是 loadHtml 的多页 pdf
【发布时间】:2014-10-26 00:02:12
【问题描述】:

我正在尝试创建可以下载和打印的批量 pdf 发票(使用:barryvdh/laravel-dompdf)。通过电子邮件发送发票很容易,因为“发送”命令在循环中完美运行,并将附加当前创建的 pdf,但 $pdf->download() 需要返回响应——我尝试下载而不“返回”得到一个错误消息,并且“返回”当然会打破循环。由于我的发票很复杂,我正在使用

    $pdf->loadView('invoices.show',$data);

使用视图创建发票,而不是尝试在控制器中编写所有 html。我可以将所有发票合并成一个多页的 pdf。我了解使用 css style="page-break-after" 创建不同页面的技巧,但是当我使用 loadView 以发送特定于页面的 $data 而不是loadHtml -- loadView 总是只包含最后一张发票。

例如控制器:

public function invoices()
{
    $pdf = App:make('dompdf');
    for($i=0; $i<4; $i++) {
    $data = array('i'=>$i);
    }
$pdf->loadView('invoices.show',$data);
return $pdf->download("Invoice");
}

(我在这里的示例 $data 数组中只包含一个变量;真实的发票显然有很多 $data 变量。)

视图,包裹在:

<div style="page-break-after:always;">

仅返回,其中 Invoice # = $i

Invoice #3

当然,将 $pdf->loadView 放入循环中的效果完全相同。而且由于 $pdf 不是字符串,因此在循环中尝试类似 $pdf .= ... 是行不通的。

感谢您的任何建议。

【问题讨论】:

    标签: php pdf laravel-4


    【解决方案1】:

    我们需要在 laravel 5 和刀片模板中生成一个多页的 PDF 文件。

    在这篇文章中,我们找到了 dompdf 如何创建文档的解决方案: convert multiple html to pdf

    我的解决方案: 我创建了 2 个刀片模板,container.blade 和 content.blade。 首先,我将数据从控制器发送到 content.blade 到 foreach 循环中

    loop...
    
    view2 = View::make('contentview', compact('data'))->render();
    $viewfinal = $viewfinal.$view2;
    
    ..endloop
    

    $viewfinal 是从刀片模板中生成 HEADS 和 BODYS 的所有 html 代码的串联。 最后:

    $view = View::make('containerview', compact('viewfinal'))->render();
    

    containerview.blade,只有这个:

    <!DOCTYPE html>
    <html lang="en">
    {!! $viewfinal !!}
    </html>
    

    而 content.blade 生成的页面带有“head”和“body”,但不是“html”标签,每个 PDF 页面一个:

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    
    
    <title>Multiples pages</title>
    
    <link rel="stylesheet" type="text/css" href="assets/css/impresion1.css">
     </head><body> ...........</body>
    

    【讨论】:

      【解决方案2】:

      正如我发现的那样,答案就是将任何所需的循环放在视图中,而不是控制器中。效果很好。

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2018-03-25
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        相关资源
        最近更新 更多