Generowanie pliku WORD w Laravel

0

Witajcie,
Mam taki kod do generowania plików w Wordzie w Laravel 5.8:


    $phpWord = new \PhpOffice\PhpWord\PhpWord();
            $month = $request->input('month');
            if ($month == null) {
                $now = Carbon::now();
                $month = $now->month;
            }
            $events = $this->frontendGateway->getEventCalendarDownload($request, $month);
            $logo = public_path('assets/images/logo3.jpg');
            $view_content = View::make('psCMS.prints.events-view', ['events' => $events, 'logo' => $logo])->render();
            $section = $phpWord->addSection();
            $text = $section->addText('aaaaaaaa');
            $text = $section->addText('bbbbbbbbbb');
            $text = $section->addText('ccccccccccc');
            $text = $section->addText($view_content);
    
            //ob_clean();
            $fileName = 'Event_calendar' . '-' . now()->toDateString() . '.doc';
            $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
            $objWriter->save($fileName);
    
            header('Content-Type: application/octet-stream');
            header("Cache-Control: no-cache, must-revalidate");
            header("Pragma: no-cache");
            header("Content-Disposition: attachment; filename=$fileName");
            ob_clean();
            readfile($fileName);

Mój Blade:


    <div id="header" class="fontSize14">
        <table width="100%">
            <tr>
                <td align="left" style="width: 20%;">
                    <img src="{{ $logo }}" class="logo" />
                </td>
                <td align="left" style="width: 80%;">
                    <span class="fontSize19"><b>my name</b></span><br />
                    street<br />
                </td>
            </tr>
        </table>
    </div>
    
    <div id="content" class="fontSize11">
        <b class="fontSize19">Kalendarz wydarzeń</b><br /><br />
    
    
        <table width="100%">
            <thead style="background-color: lightgray;">
                <tr>
                    <th>#</th>
                    <th>Data</th>
                    <th>Godzina</th>
                    <th>Nazwa imprezy</th>
                    <th>Miejsce</th>
                </tr>
            </thead>
            <tbody>
                @foreach($events as $event)
                @php
                    $hourFromX = explode(":", $event->hour_from);
                    $hourToX = explode(":", $event->hour_to);
                    $hourFrom = $hourFromX['0'].":".$hourFromX['1'];
                    $hourTo = $hourToX['0'].":".$hourToX['1'];
                @endphp
                <tr>
                    <th scope="row">{{ $loop->iteration }}</th>
                <td>{{ $event->date_from }}</td>
                <td align="left">{{ $hourFrom }}-{{ $hourTo }}</td>
                <td align="left">{{ $event->title }}</td>
                <td align="left">@if(isset($event->localization)) {{ $event->localization->name }},
                    {{ $event->localization->city }}
                    {{ $event->localization->street }} @endif</td>
                </tr>
                @endforeach
            </tbody>
        </table>
    
    
    </div>

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

Kiedy zakomentuję tą linię:


    $text = $section->addText($view_content);

Plik Worda jest wygenerowany bez problemu, otwiera się.

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

0

Zobacz co masz na $view_content, poza tym do czego Ci potrzebne $text?

0

https://pastebin.pl/view/fd5f84ed - taką mam wartość w tej zmiennej.

chcę wstawić do mojego pliku powyższą zawartość :)

1
    <script type="text/php">
        if ( isset($pdf) ) {
        $x = 525;
        $y = 820;
        $text = "Strona {PAGE_NUM} z {PAGE_COUNT}";
        $font = $fontMetrics->get_font("DejaVu Sans", "normal");
        $size = 6;
        $color = array(0,0,0);
        $word_space = 0.0;
        $char_space = 0.0;
        $angle = 0.0;
        $pdf->page_text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
 
        $x = 25;
        $y = 820;
        $text = "@ ".env('APP_NAME'). ". Wszystkie prawa zastrzeżone. Data wydruku: ". date('Y-m-d H:i:s');
        $font = $fontMetrics->get_font("DejaVu Sans", "normal");
        $size = 6;
        $color = array(0,0,0);
        $word_space = 0.0;
        $char_space = 0.0;
        $angle = 0.0;
        $pdf->page_text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
    }
</script>

To na pewno powinno być?

0

Skasowałem. Teraz mam taki wynik: https://pastebin.com/i4K96Jp8
Ale niestety nie pomogło :(

1

Może biblioteka ma problem z HTML podczas dodawania tekstu?
Według przykładów z biblioteki to HTML dodają w następujący sposób (https://github.com/PHPOffice/PHPWord/blob/develop/samples/Sample_26_Html.php):

[...]
$html .= '<p style="margin-top: 240pt;">The text below is not visible, click on show/hide to reveil it:</p>';
$html .= '<p style="display: none">This is hidden text</p>';
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $html, false, false);

Dodatkowo widzę, że biblioteka posiada również możliwość odczytu HTML (https://github.com/PHPOffice/PHPWord/blob/develop/samples/Sample_30_ReadHTML.php).

1 użytkowników online, w tym zalogowanych: 0, gości: 1