PHPWord HTML 到 Word 设计问题

我正在使用 PHPWord 库将我的 HTML 模板转换为 Word。

库链接

我将 HTML 转换为 Word 文件的代码如下:

$phpWord = new \PhpOffice\PhpWord\PhpWord();

$section = $phpWord->addSection();

\PhpOffice\PhpWord\Shared\Html::addHtml($section, $htmlTemplate);

$targetFile = __DIR__ . "/1.docx";

$phpWord->save($targetFile, 'HTML');

我面临以下问题:

  1. 我正在使用内联样式应用背景颜色和字体颜色,但字体颜色仅有效,背景颜色无效。

 <p style="background-color:#FFFF00;color:#FF0000;">Some text</p>
  1. 我使用下面的 HTML 代码允许在 HTML 模板的部分内分页。但它不适用于导出的 Word 文件。

<div style="page-break-after:always"><span style="display:none">&nbsp;</span></div>
  1. 我正在使用 span 标签将某些单词标记为粗体或更改段落中单词的颜色。但是当我导出到 Word 文件时,span 标记后的内容移动到单词下方的新行。我尝试在 span 标签中使用display:inline css 属性。但它不起作用。

<p>some text before span tag <span style="color:#FF0000;display:inline">XXXXX</span> Text after span tag.</p>

编辑:

如果上述问题无法用 PHPWord 解决,请推荐我可以用来将带有内联 css 的 HTML 转换为 Word 的任何其他库!


萧十郎
浏览 215回答 2
2回答

慕斯709654

我刚刚执行了一个非常简单的测试,它工作正常。我的代码与您的代码几乎完全相同,只是我告诉系统将其编写为 Word 文档,而不是 HTML。use PhpOffice\PhpWord\PhpWord;use PhpOffice\PhpWord\Shared\Html;require_once __DIR__ . '/vendor/autoload.php';$htmlTemplate = ' <p style="background-color:#FFFF00;color:#FF0000;">Some text</p>';$phpWord = new PhpWord();$section = $phpWord->addSection();Html::addHtml($section, $htmlTemplate);$targetFile = __DIR__ . "/1.docx";$phpWord->save($targetFile, 'Word2007');哪个产生:如果将保存模式更改为HTML,背景颜色会消失,但无论如何它不再是 Word 文档,只是原始 HTML,所以我认为这无关紧要。$targetFile&nbsp;=&nbsp;__DIR__&nbsp;.&nbsp;"/1.html"; $phpWord->save($targetFile,&nbsp;'HTML');

繁星coding

您在一个问题/主题中有很多东西。所以我只会根据您列举的设计问题来回答:背景颜色您可以通过像这样设置表格样式来呈现背景颜色:$table_style = array( 'bgColor' => '#FFFF00' );$section = $phpWord->addSection();$table = $section->addTable($table_style);$table->addRow();$cell = $table->addCell();\PhpOffice\PhpWord\Shared\Html::addHtml($cell, $htmlTemplate);分页符文档中的示例 html 似乎不支持 html 代码中的分页符。但是,您可以通过隐式调用addPageBreak()来在各节中呈现分页符,如下所示:$section = $phpWord->addSection();\PhpOffice\PhpWord\Shared\Html::addHtml($section, $someHTMLcode);$section->addPageBreak();$section->addText("some plain text");$section->addPageBreak();意外的内联文本中断也许你可以尝试spaces用&nbsp;这样的方式替换一些:<p>some text before span tag&nbsp;<span style="color:#FF0000;">XXXXX</span> Text after span tag.</p>我希望其中一些——如果不是全部——可能对你有用。祝你好运!
打开App,查看更多内容
随时随地看视频慕课网APP