Standalone DOCX to HTML processor for PHP 8.4+ with Strategy Pattern architecture.
- ✅ DOCX to HTML conversion
- ✅ Strategy Pattern architecture - 10 specialized element converters
- ✅ Clean Architecture - SRP, testable, maintainable
- ✅ Stateless design - Thread-safe processing
- ✅ Comprehensive testing - 33 tests, 71 assertions
composer require publicplan/document-processoruse Publicplan\DocumentProcessor\Service\DocumentProcessor;
use Publicplan\DocumentProcessor\Service\DocumentLoader;
// Initialize
$loader = new DocumentLoader();
$processor = new DocumentProcessor($loader);
// Process document
$result = $processor->process('/path/to/file.docx', 'filename.docx');
// Access results
$html = $result->html;
$hasChanges = $result->hasUnacceptedChanges;
$messages = $result->getAllMessages();Register services in config/services.yaml:
Publicplan\DocumentProcessor\:
resource: '../vendor/publicplan/document-processor/src/'
autowire: true
autoconfigure: true
exclude:
- '../vendor/publicplan/document-processor/src/Service/Converter/'Then inject in your controller:
use Publicplan\DocumentProcessor\Service\DocumentProcessor;
class MyController extends AbstractController
{
public function upload(
Request $request,
DocumentProcessor $processor
): Response {
$result = $processor->process('/path/to/file.docx', 'doc.docx');
return $this->render('result.html.twig', ['html' => $result->html]);
}
}Register in config/app.php:
'providers' => [
// ...
App\Providers\DocumentProcessorServiceProvider::class,
],Or use directly:
use Publicplan\DocumentProcessor\Service\DocumentProcessor;
use Publicplan\DocumentProcessor\Service\DocumentLoader;
Route::post('/upload', function (Request $request) {
$processor = new DocumentProcessor(new DocumentLoader());
$result = $processor->process($request->file('docx')->path(), 'upload.docx');
return view('result', ['html' => $result->html]);
});require 'vendor/autoload.php';
use Publicplan\DocumentProcessor\Service\DocumentProcessor;
use Publicplan\DocumentProcessor\Service\DocumentLoader;
$processor = new DocumentProcessor(new DocumentLoader());
$result = $processor->process('document.docx', 'document.docx');
echo $result->html;DocumentProcessor
├── DocumentLoader (DOCX loading & validation)
├── Element Converters (Strategy Pattern)
│ ├── TextElementConverter
│ ├── TextRunElementConverter
│ ├── ListElementConverter
│ ├── TableElementConverter
│ ├── LinkElementConverter
│ ├── BreakElementConverter
│ ├── PageBreakElementConverter
│ └── PreserveTextElementConverter
└── ElementConverterRegistry
- PHP 8.4+
- phpoffice/phpword ^1.0
- ext-zip (for DOCX handling)
composer install
composer test- Fork the repository
- Create feature branch:
git checkout -b feature/my-feature - Commit changes:
git commit -am 'Add some feature' - Push to branch:
git push origin feature/my-feature - Create Pull Request
Please ensure all tests pass and follow PSR-12 coding standards.
We use SemVer:
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
See CHANGELOG.md for version history.
MIT License - see LICENSE file for details.
Created by Publicplan GmbH
- Jarvis - Bridge system for Confluence/Jira integration
Note: This bundle was extracted from the Jarvis project to be a standalone, reusable component.