在laravel中使用dompdf循环生成多个PDF文档。

问题描述 投票:0回答:1

我想在laravel中使用ddompdf下载多个pdf文件,但下面的解决方案只是将其连接成一个pdf文件。

  $weeks = ['test','test2'];

  $html = '';
  foreach($weeks as $hours)
  {
      $view = view('contract');
      $html .= $view->render();
  }

  $pdf = PDF::loadHTML($html);            
  $sheet = $pdf->setPaper('a4', 'landscape');
  return $sheet->download('download.pdf');
laravel dompdf
1个回答
1
投票

服务器只能返回一个响应,如果你想要多个pdf文件,你应该修改你的方法,使它接受一些参数,并为每个参数生成一个pdf文件。


1
投票

在一个HTTP请求中不可能下载多个文件。

你可以做的是将文件打包成o zip并下载。你可以尝试 https:/github.comzanysoftlaravel-zip。 或任何其他可用的解决方案。

另一个选择是保存文件,并只返回保存文件的路径给客户端。然后提出一个新的请求,并为每个返回的文件路径下载文件。

另外,如果你想保存为单独的PDF文件,你需要将PDF创建移到你的foreach循环中(为每个参数创建一个PDF)。

  $weeks = ['test','test2'];
  $files = [];

  foreach($weeks as $hours)
  {
      $view = view('contract');
      $html = $view->render();
      $pdf = PDF::loadHTML($html);            
      $pdf->setPaper('a4', 'landscape');
      $pdf->save('documents/'.$hours.'.pdf'); 
      $files[] = 'documents/'.$hours.'.pdf';
  }

  return response()->json(['files' => $files]);

在这种情况下,foreach除了产生两个相同的PDF文件外,并没有真正做任何事情。如果你想实际应用某种变化到你的视图基于在 $weeks 你需要把这一点传递给你的观点。

$view = view('contract', ['data' => $hours]);

这使得 $data 您可以在您的视图中使用,并以这种方式更改生成的 PDF 文件(如果您需要更多相关帮助,请显示您的 contract.blade.php)。

© www.soinside.com 2019 - 2024. All rights reserved.