我正在尝试创建批量的pdf发票(使用:barryvdh/laravel-dompdf),可以下载和打印。通过电子邮件发送发票很容易,因为'send‘命令在循环中可以很好地工作,并将附加当前创建的pdf,但是$pdf-> download ()需要一个返回响应--我尝试在不使用" return“的情况下下载会得到一条错误消息,"return”当然会中断循环。因为我的发票很复杂,所以我用
$pdf->loadView('invoices.show',$data);使用视图创建发票,而不是尝试在控制器中写入所有的html。我可以把所有的发票合并成一个多页的pdf。我知道使用css style=“分页后”创建不同页面的诀窍,但是当我使用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;">仅退货,其中发票编号= $i
Invoice #3当然,将$pdf->loadView放入循环中也会做同样的事情。由于$pdf不是字符串,因此尝试使用$pdf .=之类的东西...在循环中不起作用。
谢谢你的建议。
发布于 2014-09-09 01:09:32
正如我所发现的,答案是简单地将任何需要的循环放在视图中,而不是放在控制器中。这很好用。
发布于 2016-09-17 07:25:14
我们需要生成一个多页的PDF文件,在laravel 5和刀片模板。
在这篇文章中,我们找到了dompdf如何创建文档的解决方案:convert multiple html to pdf
我的解决方案:我创建了两个刀片模板,container.blade和content.blade。首先,我将数据从我的控制器发送到content.blade的foreach循环中
loop...
view2 = View::make('contentview', compact('data'))->render();
$viewfinal = $viewfinal.$view2;
..endloop$viewfinal是从刀片模板生成头部和主体的所有html代码的串联。最后:
$view = View::make('containerview', compact('viewfinal'))->render();containerview.blade,只有这个:
<!DOCTYPE html>
<html lang="en">
{!! $viewfinal !!}
</html>和content.blade生成带有"head“和"body”的页面,但不是"html“标记,每个页面对应一个:
<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>https://stackoverflow.com/questions/25611240
复制相似问题