Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Generowanie pliku WORD w Laravel
Forum PHP.pl > Forum > Przedszkole
trifek
Witajcie,
Mam taki kod do generowania plików w Wordzie w Laravel 5.8:
  1. $phpWord = new \PhpOffice\PhpWord\PhpWord();
  2. $month = $request->input('month');
  3. if ($month == null) {
  4. $now = Carbon::now();
  5. $month = $now->month;
  6. }
  7. $events = $this->frontendGateway->getEventCalendarDownload($request, $month);
  8. $logo = public_path('assets/images/logo3.jpg');
  9. $view_content = View::make('psCMS.prints.events-view', ['events' => $events, 'logo' => $logo])->render();
  10. $section = $phpWord->addSection();
  11. $text = $section->addText('aaaaaaaa');
  12. $text = $section->addText('bbbbbbbbbb');
  13. $text = $section->addText('ccccccccccc');
  14. $text = $section->addText($view_content);
  15.  
  16. //ob_clean();
  17. $fileName = 'Event_calendar' . '-' . now()->toDateString() . '.doc';
  18. $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
  19. $objWriter->save($fileName);
  20.  
  21. header('Content-Type: application/octet-stream');
  22. header("Cache-Control: no-cache, must-revalidate");
  23. header("Pragma: no-cache");
  24. header("Content-Disposition: attachment; filename=$fileName");
  25. readfile($fileName);

Mój Blade:
  1. <div id="header" class="fontSize14">
  2. <table width="100%">
  3. <tr>
  4. <td align="left" style="width: 20%;">
  5. <img src="{{ $logo }}" class="logo" />
  6. </td>
  7. <td align="left" style="width: 80%;">
  8. <span class="fontSize19"><b>my name</b></span><br />
  9. street<br />
  10. </td>
  11. </tr>
  12. </table>
  13. </div>
  14.  
  15. <div id="content" class="fontSize11">
  16. <b class="fontSize19">Kalendarz wydarzeń</b><br /><br />
  17.  
  18.  
  19. <table width="100%">
  20. <thead style="background-color: lightgray;">
  21. <tr>
  22. <th>#</th>
  23. <th>Data</th>
  24. <th>Godzina</th>
  25. <th>Nazwa imprezy</th>
  26. <th>Miejsce</th>
  27. </tr>
  28. </thead>
  29. <tbody>
  30. @foreach($events as $event)
  31. @php
  32. $hourFromX = explode(":", $event->hour_from);
  33. $hourToX = explode(":", $event->hour_to);
  34. $hourFrom = $hourFromX['0'].":".$hourFromX['1'];
  35. $hourTo = $hourToX['0'].":".$hourToX['1'];
  36. @endphp
  37. <tr>
  38. <th scope="row">{{ $loop->iteration }}</th>
  39. <td>{{ $event->date_from }}</td>
  40. <td align="left">{{ $hourFrom }}-{{ $hourTo }}</td>
  41. <td align="left">{{ $event->title }}</td>
  42. <td align="left">@if(isset($event->localization)) {{ $event->localization->name }},
  43. {{ $event->localization->city }}
  44. {{ $event->localization->street }} @endif</td>
  45. </tr>
  46. @endforeach
  47. </tbody>
  48. </table>
  49.  
  50.  
  51. </div>

Kiedy uruchamiam ten kod mam komunikat: plik Word jest uszkodzony.

Kiedy zakomentuję tą linię:
  1. $text = $section->addText($view_content);

Plik Worda jest wygenerowany bez problemu, otwiera się.

W jaki sposób można to naprawić?




viking
Otwórz ten uszkodzony plik w jakims notatniku. Pewnie w pierwszej linii będzie warning.
trifek
Tak wygląda wynik: https://pastebin.com/i4K96Jp8

Nie ma żadnego błędu sad.gif
nospor
No ale zdaje sie generowales plik WORD a to co pokazales to zwykly html.
trueblue
https://stackoverflow.com/a/28107957
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.