PHPackages                             nowo-tech/word-to-pdf-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. nowo-tech/word-to-pdf-bundle

ActiveSymfony-bundle[PDF &amp; Document Generation](/categories/documents)

nowo-tech/word-to-pdf-bundle
============================

Symfony bundle: convert Microsoft Word (.docx/.doc) to PDF via LibreOffice Writer (soffice) with named profiles and runtime dependency checks.

v1.2.1(yesterday)018↑2566.7%MITPHP &gt;=8.2 &lt;8.6

Since Jul 22Compare

[ Source](https://github.com/nowo-tech/WordToPdfBundle)[ Packagist](https://packagist.org/packages/nowo-tech/word-to-pdf-bundle)[ Docs](https://github.com/nowo-tech/WordToPdfBundle)[ RSS](/packages/nowo-tech-word-to-pdf-bundle/feed)WikiDiscussions Synced today

READMEChangelog (5)Dependencies (16)Versions (6)Used By (0)

WordToPdfBundle
===============

[](#wordtopdfbundle)

[![CI](https://github.com/nowo-tech/WordToPdfBundle/actions/workflows/ci.yml/badge.svg)](https://github.com/nowo-tech/WordToPdfBundle/actions/workflows/ci.yml)[![Packagist Version](https://camo.githubusercontent.com/3703bc173f5cc0386d7cffc27094e5726a660a28bcdbf4a575ce5c8e6595fe22/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6e6f776f2d746563682f776f72642d746f2d7064662d62756e646c652e7376673f7374796c653d666c6174)](https://packagist.org/packages/nowo-tech/word-to-pdf-bundle)[![Packagist Downloads](https://camo.githubusercontent.com/48756662fab8e1c22e92877c22b5760a41f6b1d30b9dc030b3c2da02b01cc901/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6e6f776f2d746563682f776f72642d746f2d7064662d62756e646c652e737667)](https://packagist.org/packages/nowo-tech/word-to-pdf-bundle)[![License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)[![PHP](https://camo.githubusercontent.com/3f99b197569aa2dcfbefff17ecc68d74098e7f929d8b52dc40f3a898f740eae1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d3737374242343f6c6f676f3d706870)](https://php.net)[![Symfony](https://camo.githubusercontent.com/0701ae1a8855b98dea0f1dc9d9025d6b0f9444a803559dc983614d044176348b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53796d666f6e792d372e34253230253743253230382e30253230253743253230382e312532422d3030303030303f6c6f676f3d73796d666f6e79)](https://symfony.com)[![GitHub stars](https://camo.githubusercontent.com/2af121e07a9f5586650dc47f96eb57d29abcd123e79e2bb7854b4ccad54d7ef0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6e6f776f2d746563682f776f72642d746f2d7064662d62756e646c652e7376673f7374796c653d736f6369616c266c6162656c3d53746172)](https://github.com/nowo-tech/WordToPdfBundle)[![Coverage](https://camo.githubusercontent.com/cd0704b56f1d56def350b6d0164316307bb2f47834225fd85443b6fb0059bc73/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f7665726167652d3130302532352d627269676874677265656e)](#tests-and-coverage)

> **Found this useful?** Install from Packagist (`composer require nowo-tech/word-to-pdf-bundle`) and consider starring [WordToPdfBundle on GitHub](https://github.com/nowo-tech/WordToPdfBundle).

Symfony bundle that converts **Microsoft Word** (`.docx` / `.doc`) to **PDF** using **LibreOffice Writer** (`soffice` headless) for print-quality layout fidelity:

- **named YAML profiles** + **default profile** + deep merge with per-call options, or **`convertWithInlineProfile()`**;
- **batch conversion** via **`convertMany()`** with **`PdfNaming`** (keep / prefix / suffix / surround / fixed / callback, or path ⇒ filename map);
- **runtime check** that **LibreOffice Writer** is installed (`nowo:word-to-pdf:check`); fails with install hints if missing;
- works under **PHP-FPM** and **FrankenPHP** (Symfony Process / `proc_open`);
- Symfony-friendly export: streamed/binary responses, local path, optional **Flysystem**.

This bundle does **not** fill Word templates (see [WordTemplateBundle](https://github.com/nowo-tech/WordTemplateBundle)), convert HTML to Word (see [HtmlToWordBundle](https://github.com/nowo-tech/HtmlToWordBundle)), or use DomPDF (DomPDF cannot preserve Word styles).

Documentation
-------------

[](#documentation)

- [Installation](docs/INSTALLATION.md)
- [Configuration](docs/CONFIGURATION.md)
- [Usage](docs/USAGE.md)
- [Contributing](docs/CONTRIBUTING.md)
- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Changelog](docs/CHANGELOG.md)
- [Upgrading](docs/UPGRADING.md)
- [Release](docs/RELEASE.md)
- [Security](docs/SECURITY.md)
- [Engram](docs/ENGRAM.md)
- [Spec-driven development](docs/SPEC-DRIVEN-DEVELOPMENT.md)
- [GitHub Spec Kit](docs/SPEC-KIT.md)

### Additional documentation

[](#additional-documentation)

- [GitHub Actions CI requirements](docs/GITHUB_CI.md)
- [FrankenPHP / Docker demo](docs/DEMO-FRANKENPHP.md) — `demo/symfony8` (see [`demo/README.md`](demo/README.md))

System requirement
------------------

[](#system-requirement)

**LibreOffice Writer must be installed on the host / container** (Composer cannot install it):

```
# Debian / Ubuntu
sudo apt-get install -y libreoffice-writer

# Alpine
apk add libreoffice

# Fedora / RHEL
sudo dnf install -y libreoffice-writer
```

Verify:

```
php bin/console nowo:word-to-pdf:check
```

Quick start
-----------

[](#quick-start)

```
composer require nowo-tech/word-to-pdf-bundle
php bin/console nowo:word-to-pdf:check
```

```
# config/packages/nowo_word_to_pdf.yaml
nowo_word_to_pdf:
    default_profile: default
    profiles:
        default:
            timeout: 180
            export:
                filename: document.pdf
```

Prefer the shared Nowo env (demos and multi-bundle apps):

```
timeout: '%env(int:PROCESS_TIMEOUT)%'   # PROCESS_TIMEOUT=180 in .env
```

See [docs/DEMO-FRANKENPHP.md](docs/DEMO-FRANKENPHP.md#shared-process_timeout-all-nowo-process-based-bundles).

```
use Nowo\WordToPdfBundle\Converter\WordToPdfConverterInterface;
use Nowo\WordToPdfBundle\Export\ExporterInterface;
use Nowo\WordToPdfBundle\Naming\PdfNaming;

public function download(WordToPdfConverterInterface $converter, ExporterInterface $exporter): Response
{
    $pdf = $converter->convert('/path/to/contract.docx');
    // Batch: $converter->convertMany([$pathA, $pathB], PdfNaming::suffix(' [converted]'));

    return $exporter->toBinaryResponse($pdf);
}
```

FrankenPHP worker mode
----------------------

[](#frankenphp-worker-mode)

FrankenPHP worker mode: Supported (tested with LibreOffice conversion under FrankenPHP).

The demo runs under FrankenPHP. Conversion uses Symfony Process with a hard **timeout** (and idle timeout); on expiry the runner stops the process tree so workers are not left with orphaned LibreOffice children (**REQ-RUNTIME-001**). Align PHP / Caddy deadlines above the profile timeout.

Demos use **`FRANKENPHP_MODE`** (`worker` by default, or `classic`) on PHP **8.5** — see [docs/DEMO-FRANKENPHP.md](docs/DEMO-FRANKENPHP.md). Change mode in `.env` and recreate containers (`docker compose up -d`); no image rebuild.

```
cd demo/symfony8 && cp .env.example .env && make up   # Symfony 8, port 8022
```

Tests and coverage
------------------

[](#tests-and-coverage)

ScopeDetail**PHPUnit**`composer test` — unit + integration (`@group libreoffice` skipped when `soffice` is absent).**PHP lines**`composer coverage-check` enforces **100%** (PCOV). Latest measurement: **PHP: 100%**.**TS/JS**N/A (no frontend assets in this bundle).```
composer test
composer coverage-check
```

Development
-----------

[](#development)

```
make up
make qa
make release-check
```

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

1d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/e7947bfc3f2ce9574a18a2c60f3d95b5d1b0740e65dc929332c92f1df21f75ab?d=identicon)[HecFranco](/maintainers/HecFranco)

---

Tags

symfonypdfconversionworddocxSymfony BundleLibreOfficesoffice

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/nowo-tech-word-to-pdf-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/nowo-tech-word-to-pdf-bundle/health.svg)](https://phpackages.com/packages/nowo-tech-word-to-pdf-bundle)
```

###  Alternatives

[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M595](/packages/shopware-core)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

9421.6k64](/packages/open-dxp-opendxp)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M215](/packages/sulu-sulu)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
