PHPWord HTML 到 Word 设计问题
PHPWord HTML to Word design issue
我正在使用 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"> </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 的任何其他库!
我刚刚进行了一个非常简单的测试,它工作正常。我的代码与您的代码几乎完全相同,只是我告诉系统将其编写为 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 = __DIR__ . "/1.html";
$phpWord->save($targetFile, 'HTML');
你在一个 question/topic 中有很多东西。所以我只会根据您列举的设计问题来回答:
背景颜色
您可以像这样通过 styling a table 渲染背景颜色:
$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);
分页符
sample html from the docs doesn't seem to support page breaks within an html code. However, you may be able to render pagebreaks within the sections by implicitly calling addPageBreak()像这样:
$section = $phpWord->addSection();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $someHTMLcode);
$section->addPageBreak();
$section->addText("some plain text");
$section->addPageBreak();
意外的内联文本中断
也许您可以尝试用
替换一些 spaces
,如下所示:
<p>some text before span tag <span style="color:#FF0000;">XXXXX</span> Text after span tag.</p>
我希望其中的一些——如果不是全部的话——可能对你有用。祝你好运!
我正在使用 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"> </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 的任何其他库!
我刚刚进行了一个非常简单的测试,它工作正常。我的代码与您的代码几乎完全相同,只是我告诉系统将其编写为 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 = __DIR__ . "/1.html";
$phpWord->save($targetFile, 'HTML');
你在一个 question/topic 中有很多东西。所以我只会根据您列举的设计问题来回答:
背景颜色
您可以像这样通过 styling a table 渲染背景颜色:
$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);
分页符
sample html from the docs doesn't seem to support page breaks within an html code. However, you may be able to render pagebreaks within the sections by implicitly calling addPageBreak()像这样:
$section = $phpWord->addSection();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $someHTMLcode);
$section->addPageBreak();
$section->addText("some plain text");
$section->addPageBreak();
意外的内联文本中断
也许您可以尝试用
替换一些 spaces
,如下所示:
<p>some text before span tag <span style="color:#FF0000;">XXXXX</span> Text after span tag.</p>
我希望其中的一些——如果不是全部的话——可能对你有用。祝你好运!