PHPWord HTML для проблемы дизайна Word - PullRequest
0 голосов
/ 29 мая 2020

Я использую библиотеку 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>
Я использую приведенный ниже код HTML, чтобы разрешить разрыв страницы в разделах шаблонов HTML. но не работает в экспортированном файле Word.
<div style="page-break-after:always"><span style="display:none">&nbsp;</span></div>
Я использую тег span, чтобы выделить слово жирным шрифтом или изменить цвет слова в абзаце. но когда я экспортирую в файл Word, содержимое после тега span перемещается на новую строку под словом. Я пробовал использовать свойство display: inline css в теге span. но это не работает.
<p>some text before span tag <span style="color:#FF0000;display:inline">XXXXX</span> Text after span tag.</p>

Изменить:

Пожалуйста, порекомендуйте любую другую библиотеку, которую я могу использовать для преобразования HTML со встроенным css в Word, если вышеупомянутые проблемы не могут быть решены с помощью PHPWord!

Ответы [ 2 ]

1 голос
/ 02 июня 2020

Я только что выполнил очень простой тест, и он работает правильно. Мой код почти такой же, как и ваш, за исключением того, что я говорю системе писать его как документ 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');

Что дает:

Screenshot showing requested background and foreground text correctly applied in Word document

Если вы измените режим сохранения на HTML, цвет фона исчезнет, ​​но это уже не документ Word, а просто HTML, поэтому я не думаю, что это имеет значение.

$targetFile = __DIR__ . "/1.html";
$phpWord->save($targetFile, 'HTML');
0 голосов
/ 07 июня 2020

У вас много всего в одном вопросе / topi c. Поэтому я буду основывать свои ответы на перечисленных вами проблемах дизайна:

Цвет фона

Вы можете визуализировать цвет фона с помощью стилизации таблицы следующим образом:

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

Я надеюсь, что некоторые из них - если не все - могут сработать для вас. Удачи!

...