Laravel导出Word文档样式设置失败问题求助
解决Laravel中PHPWord导出Word文档样式不生效的问题
你遇到的样式不生效问题,核心是PHPWord的addText方法参数顺序搞错了。该方法的正确参数顺序是:addText(文本内容, 字体样式数组, 段落样式数组),你之前把字体样式放到了段落样式的参数位置,导致样式没有被应用。
正确的样式实现代码
// 创建字体样式 $boldFontStyle = ['bold' => true]; $italicFontStyle = ['italic' => true]; // 可扩展更多样式,比如字体大小、颜色 $keyFontStyle = ['bold' => true, 'size' => 12, 'color' => '#000000']; $valueFontStyle = ['italic' => true, 'size' => 12, 'color' => '#333333']; $section = $phpWord->addSection(); foreach ($customData as $key => $value) { // 把字体样式作为第二个参数传递 $section->addText("$key: ", $keyFontStyle); $section->addText($value, $valueFontStyle); $section->addTextBreak(1); }
完整的导出函数改造示例
public function ExportWord($id) { $client = Demanderendezvous::findOrFail($id); $customData = []; foreach ($client->getAttributes() as $key => $value) { switch ($key) { case 'created_at': $key = 'Date Pris rendez-vous'; $value = date('Y-m-d H:i:s', strtotime($value)); break; case 'updated_at': case 'etat': case 'Id_agent': case 'id': continue 2; } $customData[$key] = $value; } $phpWord = new PhpWord(); $section = $phpWord->addSection(); // 定义样式 $boldStyle = ['bold' => true, 'name' => 'Arial', 'size' => 12]; $italicStyle = ['italic' => true, 'name' => 'Arial', 'size' => 12]; foreach ($customData as $key => $value) { // 正确传递字体样式到第二个参数 $section->addText("$key: ", $boldStyle); $section->addText($value, $italicStyle); $section->addTextBreak(1); } $filename = $client->Prenom . '_'.$client->Nom . '_' . $client->Num_RDV . '.docx'; $path = storage_path('app/public/' . $filename); $objWriter = IOFactory::createWriter($phpWord, 'Word2007'); $objWriter->save($path); return response()->download($path)->deleteFileAfterSend(true); }
额外样式扩展
如果需要更复杂的样式,比如段落对齐、行距,可以单独定义段落样式并传递给第三个参数:
// 段落样式:居左,1.5倍行距 $paragraphStyle = ['align' => 'left', 'lineHeight' => 1.5]; $section->addText("$key: ", $boldStyle, $paragraphStyle);
内容的提问来源于stack exchange,提问作者Nadir
相关产品推荐
相关产品推荐

