2016-06-26 4 views
0

У меня есть этот метод в моем контроллере, который экспортировать PDFDOMPODF неудачи в Laravel

public function export($semester) 
    { 
     // some code 

     $pdf = \PDF::loadView('entities.match.pdf', ['profiles' => $profiles, 'semester' => $semester]); 

     return $pdf->download('Matches_' . $semester->name . '.pdf'); 
    } 

и мой «match.pdf» вид

<h3>Matches for {{ $semester->name }}</h3> 

@if (count($profiles) == 0) 
    No Matches for this semester yet... 
@else 
    <table border="1" border-spacing: "5px" style="width:100%"> 
    <thead> 
    <tr> 
     <td align="center" colspan="2">Local Student</td> 
     <td align="center" colspan="2">Incoming Student</td> 
    </tr> 
    <tr> 
     <th> Last, first name</th> 
     <th> Course</th> 
     <th> Last, first name</th> 
     <th> Course</th> 
    </tr> 
    </thead> 
    <tbody> 
    @foreach($profiles as $item) 
     <tr> 
      <td width="20%"> 
       {{ $item['local']->user->last_name }}, {{ $item['local']->user->first_name }}<br> 
       {{ $item['local']->user->email }} 
      </td> 
      <td width="30%">{{ $item['local']->course->name }}</td> 
      <td width="20%"> 
       {{ $item['incoming']->user->last_name }}, {{ $item['incoming']->user->first_name }}<br> 
       {{ $item['incoming']->user->email }} 
      </td> 
      <td width="30%">{{ $item['incoming']->course->name }}</td> 
     </tr> 
    @endforeach 
    </tbody> 
    </table> 
@endif 

Код правильно и работает, но если только если количество «профилей» меньше, чем около 110. Если сумма «профиля» выше этого числа, я получаю «не удалось» в качестве статуса загрузки в Firefox и Chrome.

Это ошибка DOMPDF? Является ли мой код неправильным? Любое обходное решение?

ответ

0

Ваш код выглядит отлично, я бы предположил, что либо на сервере заканчивается память при создании PDF-файла, либо он отключен.

Что бы я сделал, это фрагмент PDF-файла на разделы. То есть голова (так, голова таблицы + заголовки), тело (элементы профиля разделены на более управляемые куски, так 50 или около того) и нижний колонтитул.

Если вы создаете все это как различные PDF в вы можете использовать следующий код, чтобы объединить их:

$fileArray= array("name1.pdf","name2.pdf","name3.pdf","name4.pdf"); 

$datadir = "save_path/"; 
$outputName = $datadir."merged.pdf"; 

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputName "; 
//Add each pdf file to the end of the command 
foreach($fileArray as $file) { 
    $cmd .= $file." "; 
} 
$result = shell_exec($cmd); 

Код от этого вопроса: Merge PDF files with PHP