【问题标题】:How to convert html blade that contains dynamic data from database to PDF in laravel?如何在laravel中将包含动态数据的html刀片从数据库转换为PDF?
【发布时间】:2018-04-26 09:37:41
【问题描述】:

我正在尝试使用 laravel 中的 tcpdf 编写将 html 刀片转换为 PDF 的代码。

这是我用来转换的控制器代码:

public function htmlToPDF()
{  
    $view=view('PdfDemo');
    $html_content =$view->render();
    PDF::SetTitle('Sample PDF');
    PDF::AddPage();
    PDF::writeHTML($html_content, true, false, true, false, '');
    PDF::Output('SamplePDF.pdf');
}

当我将静态数据放在我的视图(PdfDemo)上时,一切都会成功运行,但问题是当我将带有一些变量的动态数据放在刀片中时,如下所示:

                        <table>
                          <?php $i=0?>
                            @if(count($names))
                                @foreach($names as $n)
                                    <tr><td>
                                    <label>Name{{$i}}:</label>{{$n}}</td>
                                    <tr><td><hr></td></tr>
                                    <?php $index = $index+1; ?>
                                @endforeach
                            @endif
                        </table>

这里的 $names 是控制器其他函数中 select 语句的结果,然后我将它传递给刀片,如下所示:

 return view('PdfDemo',compact('names'));

在这种情况下,刀片完全符合我的要求,但是当我尝试转换为 PDF 时,它显示错误,$name 未定义。

【问题讨论】:

  • 与问题无关,但在foreach使用$index,这样你就不需要在刀片上调用php了。
  • 你说得对,我会的

标签: php html laravel


【解决方案1】:

这样做:

$view = View::make('PdfDemo',compact('names'));
$contents = (string) $view;
// or
$contents = $view->render();

当您使用View::make()时,它会在添加动态变量的值后将刀片文件的HTML代码作为HTML内容。

【讨论】:

  • 这是我想要的,但它不起作用,我尝试了,但没有任何改变
  • 起初,当我尝试仍然发现问题时,但我将提供名称的 select 语句放在转换函数中并按照您的编写进行操作,然后没有出现错误,但它仍然处理显示此错误:超过 60 秒的最大执行时间
  • 这是一个完全不同的问题。您应该在php.ini 文件或set_time_limit(0); 中增加最大执行时间
  • 终于在不改变执行时间的情况下解决了^_^,时间问题出在我的代码中,因为我有一些不必要的引导div,当我删除它时,代码运行成功,非常感谢^^
  • 它适用于这两种情况,如果我放置或删除make,但你能告诉我什么时候应该使用make吗?
【解决方案2】:

您没有将数据传递给htmlToPDF 函数中的视图。

尝试将其更改为:

public function htmlToPDF($names)
{  
    $view=view('PdfDemo', compact('names');
    $html_content =$view->render();
    PDF::SetTitle('Sample PDF');
    PDF::AddPage();
    PDF::writeHTML($html_content, true, false, true, false, '');
    PDF::Output('SamplePDF.pdf');
}

【讨论】:

  • 没什么变化 :(
  • 我也尝试在这个函数上放置相同的选择语句,然后在你写的时候压缩名称,它仍然会处理直到给出这个:超过 60 秒的最大执行时间
  • 您可以在控制器中添加部分返回响应吗?
  • 它现在可以成功运行 ^_^,我将 select 语句添加到函数并压缩名称而不将其添加为函数的参数,关于执行时间问题,我删除了一些额外的标签作为不必要的引导 div然后一切都会好起来的,谢谢你:))))
  • 这里需要加一个右大括号 $view=view('PdfDemo', compact('names');
猜你喜欢
  • 2017-07-04
  • 2022-10-08
  • 2021-10-22
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多