nowo-tech/html-to-word-bundle

Symfony bundle: HTML (WYSIWYG output) → DOCX with named YAML profiles, PHPWord, sanitization and tagged transformers.

Maintainers

Package info

github.com/nowo-tech/HtmlToWordBundle

Type:symfony-bundle

pkg:composer/nowo-tech/html-to-word-bundle

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 3

v1.1.0 2026-05-07 09:06 UTC

README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

Found this useful? Install from Packagist (composer require nowo-tech/html-to-word-bundle) and consider starring HtmlToWordBundle on GitHub.

Symfony bundle that converts rich HTML (WYSIWYG output from TipTap, CKEditor, etc.—already rendered server-side) into a downloadable .docx using PHPWord, with:

  • named YAML profiles + default profile + deep merge with per-call options, or convertWithInlineProfile() for a full stored profile (no YAML merge);
  • sanitization and HTML5 parsing (masterminds/html5);
  • tagged transformers for block elements (p, headings, lists, tables, images, …);
  • remote & inline images — optional download of http(s):// <img src> to temp paths before PhpWord, with cleanup after DOCX save;
  • optional header/footer (logo, text, page numbers) per profile;
  • Symfony-friendly export: streamed/binary responses, local path, optional Flysystem.

This bundle does not render Twig, generate HTML, produce PDF, or edit existing Word files.

Documentation

Additional documentation

  • FrankenPHP demos — how demo/symfony7 runs in Docker.
  • Example YAML profiles are shipped as src/Resources/config/nowo_html_to_word.yaml (copy into your app’s config/packages/).

Requirements

  • PHP 8.2+
  • Symfony 6.4 / 7.x / 8.x (components declared in composer.json)
  • Extensions: dom, json, libxml

Quick start

composer require nowo-tech/html-to-word-bundle

Register Nowo\HtmlToWordBundle\HtmlToWordBundle if Flex does not, then add config/packages/nowo_html_to_word.yaml (see Configuration).

use Nowo\HtmlToWordBundle\Converter\HtmlToWordConverterInterface;
use Nowo\HtmlToWordBundle\Export\ExporterInterface;

$doc = $converter->convert($html);
return $exporter->toStreamResponse($doc);

Tests and coverage

Scope Detail
PHPUnit composer test — unit tests under tests/Unit, integration tests under tests/Integration (minimal Symfony kernel in tests/Fixtures/AppKernel.php).
PHP lines Run composer test-coverage for the console summary, or composer coverage-check (same report written to coverage-output.txt, fails below 93% global lines). Latest reported global line coverage: ~94% (PCOV; a few defensive branches in exporters / image temp paths are marked @codeCoverageIgnore where impractical to hit in CI).

CI runs tests, PHPStan, and PHP-CS-Fixer on push/PR (see .github/workflows/ci.yml).

Development

Use the root Makefile and docker-compose.yml:

make up
make qa
make release-check

The PHP Docker image installs extensions required by PHPWord (including GD). Demo apps live under demo/ (see docs/DEMO-FRANKENPHP.md).

Version information

Stable releases are tagged on GitHub; upgrade notes are in docs/UPGRADING.md and docs/CHANGELOG.md.

Versioning

This library follows Semantic Versioning.

License

Released under the MIT License.