在 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的主要内容,如果未能解决你的问题,请参考以下文章

c++中导出的def文件要怎么修改

使用 pandoc 在 pdf 文件中导出所有 yaml 书目

如何在 MongoDB(大数据)中导出较小的集合?聚合超时! (非常感谢任何大数据帮助!)

在 phpmyadmin 中导出带有批量数据的 mysql 表

在 laravel 中导出 excel 或 csv 中的多维数组

从oracle数据库中导出大量数据到excel中为啥自动分成了好几个excel文件