在Laravel 5.8中的PHPWord中生成Word文件

特拉夫卡

我是Laravel的初学者,在我的项目中使用Laravel 5.8。

我具有生成PDF文件的功能:

public function getCalendar(Request $request)
{
        $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');

        $pdf = \PDF::loadView('prints.events-view', ['events' => $events, 'logo' => $logo]);
        $pdf->setOptions(['isPhpEnabled' => true, 'dpi' => 150, 'setIsRemoteEnabled' => true]);
        $pdf->setPaper('A4', 'letter');
        return $pdf->download('Event Calendar' .  '-' . now()->toDateString() . '.pdf');
    }

我的刀片:

<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">Calendar</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><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 name
            </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>

很好

现在,我要生成Word文件。我找到了这个库:https : //github.com/PHPOffice/PHPWord

我尝试将函数更改为此lib(导出到Word文件):

使用PhpOffice \ PhpWord \ PhpWord; ....

public function getCalendar(Request $request)
    {
        $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');
...
    }

如何将数据和视图添加到Word?

AWS PS

对于您拥有的视图,您需要渲染并分配给变量:

$view_content = View::make('prints.events-view', ['events' => $events, 'logo' => $logo])->render();

然后通过该库创建一个word文档,并将其附加到

// Creating the new document...
$phpWord = new \PhpOffice\PhpWord\PhpWord();

/* Note: any element you append to a document must reside inside of a Section. */

 // Adding an empty Section to the document...
$section = $phpWord->addSection();

// Adding Text element to the Section having font styled by default...
$section->addText($view_content);

// Saving the document as HTML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$file_name = 'event_calendar_' .  '-' . now()->toDateString() . '.doc';

$objWriter->save(public_path($file_name));

然后文件的URL将是url($ file_name)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章