在 Laravel 中导出包含大量数据的 PDF
Posted
技术标签:
【中文标题】在 Laravel 中导出包含大量数据的 PDF【英文标题】:Export PDF in Laravel with so much data 【发布时间】:2017-04-07 02:33:11 【问题描述】:我有下一个代码
$html = '';
foreach ($posts as $post)
$html .= '<div class="table-scrollable">
<table id="posts" class="table table-bordered table-hover">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Title</th>
</tr>
</thead>
<tbody id="body"><tr>
<td>'
. $post->id . '
</td>
<td>' .
$post->name .
'</td>
<td>'
. $post->title .
'</td>
</tr>
</tbody>
</table>
</div>';
return PDF::load($html, 'A4', 'portrait')->download('my_pdf');
问题是当我想下载这么多数据时,我收到下一个错误The localhost page isn’t working localhost is currently unable to handle this request.
但如果我尝试下载例如 20 个条目,则工作正常。我能做什么?
laravel.log
[2016-11-24 13:15:17] 生产。错误:异常'ErrorException' 带有消息“未定义的变量:data_start” /Applications/XAMPP/xamppfiles/htdocs/dicom/app/controllers/IncasariController.php:58 堆栈跟踪:
0 /Applications/XAMPP/xamppfiles/htdocs/dicom/app/controllers/IncasariController.php(58):
Illuminate\Exception\Handler->handleError(8, '未定义变量...', '/Applications/X...', 58, 数组)
1【内部函数】:IncasariController->filtrareChitante()
2 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(231):
call_user_func_array(数组,数组)
3 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(93):
Illuminate\Routing\Controller->callAction('filtrareChitant...', Array)
4 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(62):
Illuminate\Routing\ControllerDispatcher->call(Object(IncasariController), Object(Illuminate\Routing\Route), 'filtrareChitant...')
5 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/Router.php(962):
Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), 对象(照亮\Http\Request),'IncasariControl...', 'filtrareChitant...')
6【内部函数】:Illuminate\Routing\Router->Illuminate\Routingclosure()
7 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/Route.php(109):
call_user_func_array(Object(Closure), Array)
8 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1028):
Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
9 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996):
Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
10 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(775):
Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
11 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(745):
Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
12 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Session/Middleware.php(72):
Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1、真)
13 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php(47):
Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1、真)
14 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php(51):
Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, 真的)
15 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23):
Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, 真的)
16 /Applications/XAMPP/xamppfiles/htdocs/dicom/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(641):
Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
17 /Applications/XAMPP/xamppfiles/htdocs/dicom/public/index.php(49): Illuminate\Foundation\Application->run()
18 主 [] []
在网页上是:
The localhost page isn’t working
localhost is currently unable to handle this request.
【问题讨论】:
请向我们提供有关您正在使用的软件(xampp?Mac?Linux?)的更多信息,您目前用于 PDF 的软件包是什么 请在 laravel.log 或 apache / nginx error.log 中发布一些日志条目 @ImamAssidiqqi 我正在使用 XAMPP。这是我正在使用的包:github.com/barryvdh/laravel-dompdf/tree/0.4 该错误表明其他地方存在问题 - 运行 composer install, composer dump-autoload @JonC 运行了..但没有任何反应:( 【参考方案1】:您的代码假设每条记录都有一个 ID、名称和标题。
我会在调用它们之前检查它们是否真的设置了
类似的东西。
foreach ($posts as $post)
$id= isset($post->id) ? $post->id : 'ID Not Set';
$name= isset($post->name) ? $post->name : 'Name Not Set';
$title= isset($post->title) ? $post->title : ' Title Not Set';
$html .= '<div class="table-scrollable">
<table id="posts" class="table table-bordered table-hover">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Title</th>
</tr>
</thead>
<tbody id="body">
<tr>
<td>'. $id .'</td>
<td>'. $name .'</td>
<td>'. $title .'</td>
</tr>
</tbody>
</table>
</div>';
如果未设置它们可能会导致您的代码失败并出现 Object not found 错误。
您可以从 storage/logs 文件夹中查看您的日志
【讨论】:
注意:从 PHP 7.0 开始可以添加$id ?? '';
这将检查是否设置了 $id,如果是,它将设置变量。如果未设置变量,它将采用给定的变量,在这种情况下为空字符串。【参考方案2】:
好吧,您尝试将大型数据集导出为 PDF。我的建议:
-
尝试制作自定义 CSS 以减少页面负载(您可以将类复制粘贴到自定义 CSS 中)
更改 XAMPP 上 php.ini 的最大执行时间(1 分钟、5 分钟、10 分钟等)
【讨论】:
以上是关于在 Laravel 中导出包含大量数据的 PDF的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandoc 在 pdf 文件中导出所有 yaml 书目
如何在 MongoDB(大数据)中导出较小的集合?聚合超时! (非常感谢任何大数据帮助!)
在 phpmyadmin 中导出带有批量数据的 mysql 表