为了账号安全,请及时绑定邮箱和手机立即绑定

PHPWord HTML 到 Word 设计问题

PHPWord HTML 到 Word 设计问题

PHP
萧十郎 2023-04-21 15:47:26
我正在使用 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');我面临以下问题:我正在使用内联样式应用背景颜色和字体颜色,但字体颜色仅有效,背景颜色无效。 <p style="background-color:#FFFF00;color:#FF0000;">Some text</p>我使用下面的 HTML 代码允许在 HTML 模板的部分内分页。但它不适用于导出的 Word 文件。<div style="page-break-after:always"><span style="display:none">&nbsp;</span></div>我正在使用 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 的任何其他库!
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

我刚刚执行了一个非常简单的测试,它工作正常。我的代码与您的代码几乎完全相同,只是我告诉系统将其编写为 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');

哪个产生:

//img1.sycdn.imooc.com//64423fb60001776603120079.jpg

如果将保存模式更改为HTML,背景颜色会消失,但无论如何它不再是 Word 文档,只是原始 HTML,所以我认为这无关紧要。

$targetFile = __DIR__ . "/1.html";
$phpWord->save($targetFile, 'HTML');


查看完整回答
反对 回复 2023-04-21
?
繁星coding

TA贡献1797条经验 获得超4个赞

您在一个问题/主题中有很多东西。所以我只会根据您列举的设计问题来回答:

背景颜色

您可以通过像这样设置表格样式来呈现背景颜色:

$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>

我希望其中一些——如果不是全部——可能对你有用。祝你好运!


查看完整回答
反对 回复 2023-04-21
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信