Laravel - PHP 將 Textarea 文字內容轉出 Word docx 格式

最近,需要處理學生考試系統希望能將筆試的內容轉出為 word 格式,以利於批改老師能夠使用追蹤修訂功能進行批改。

在這裡做一個紀錄及範例,如何將 Textarea 文字內容

安裝 Library

首先,在Laravel 專案直接安裝 PHPWord Library

composer require phpoffice/phpword

輸出文字為 Word 檔案

先建立好 Controller 之後,直接實作範例如下:

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

// Adding an empty Section to the document...
$section = $phpWord->addSection();
// Adding Text element to the Section having font styled by default...
$section->addText(
    '"Hi 這是我的文件,請問你看得到嗎?Learn from yesterday, <w:br/> live for today, <w:br/> hope for tomorrow. '
        . '<w:br/>The important thing is not to stop questioning." '
        . '<w:br/>(Albert Einstein)'
);

// Saving the document as OOXML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');

header("Content-Disposition: attachment; filename=WordTest.docx");
$objWriter->save("php://output");

如何處理 Textarea 文字轉換輸出為 word

目前,前端學生輸入是使用 textarea ,在作答時文字內容會包含換行

在處理文字內容轉換為 word 時,必須要能辨識換行符號,在更改為段落

處理的方式大致可以參考以下做法

<?php
$text = "文字內容\n第二行文字內容\n第三行文字內容"
$textlines = explode("\n", $text);

$textrun = $section->addTextRun();
$textrun->addText(array_shift($textlines));

foreach($textlines as $line) {
    $textrun->addTextBreak();
    // maybe twice if you want to seperate the text
    // $textrun->addTextBreak(2);
    $textrun->addText($line);
}