PHP-библиотека для генерации ODT-документов из HTML.
Эта библиотека позволяет конвертировать HTML-разметку в формат ODT (OpenDocument Text), который может быть открыт в таких редакторах, как LibreOffice Writer, Apache OpenOffice Writer и других.
Библиотека следует принципам SOLID, использует внедрение зависимостей и предоставляет интерфейсы для легкой расширяемости и тестирования.
- PHP >= 7.0
- ext-zip (для работы с архивами)
- ext-dom (для работы с XML)
- ext-intl (для тестирования)
composer require belkod/odt-generatorСклонируйте репозиторий и подключите файлы вручную:
git clone https://github.com/belkod/odt-generator.git<?php
require_once 'vendor/autoload.php';
use BelKoD\OdtGenerator\OdtGenerator;
$html = '<h1>Заголовок</h1><p>Это пример текста.</p>';
$outputFile = 'document.odt';
$generator = new OdtGenerator($html, $outputFile);
$generator->generate();
// Сохранение файла
file_put_contents('my-document.odt', $generator->getOutputFile());<?php
require_once 'vendor/autoload.php';
use BelKoD\OdtGenerator\OdtGenerator;
use BelKoD\OdtGenerator\OdtArchiver;
// Создание генератора с кастомным архиватором
$archiver = new OdtArchiver();
$generator = new OdtGenerator($html, $outputFile, $archiver);
// Генерация документа
$generator->generate();
// Получение бинарных данных ODT
$odtData = $generator->getOutputFile();<?php
$html = '
<table>
<tr><td>Ячейка 1</td><td>Ячейка 2</td></tr>
<tr><td>Ячейка 3</td><td>Ячейка 4</td></tr>
</table>
<img src="image.jpg" alt="Пример изображения">
';
$generator = new OdtGenerator($html, 'document.odt');
$generator->generate();
file_put_contents('document-with-table.odt', $generator->getOutputFile());Библиотека состоит из следующих основных компонентов:
- OdtGenerator — основной класс, управляющий процессом генерации
- OdtArchiver — отвечает за создание ZIP-архива ODT
- StyleGenerator — генерирует стили документа на основе CSS
- StyleHelper — утилиты для преобразования стилей
- TagHandlerFactory — фабрика обработчиков HTML-тегов
- HtmlTags/ — обработчики отдельных HTML-тегов (p, h1-h6, table, img и др.)
Все основные классы реализуют интерфейсы для возможности мокирования и расширения:
OdtGeneratorInterfaceStyleGeneratorInterfaceOdtArchiverInterface
├── src/
│ ├── Exception/ # Кастомные исключения
│ │ ├── IOException.php
│ │ ├── OdtGeneratorException.php
│ │ └── ValidationException.php
│ ├── HtmlTags/ # Обработчики отдельных HTML-тегов
│ │ ├── BrHandler.php
│ │ ├── ContainerTagHandler.php
│ │ ├── HeadingHandler.php
│ │ ├── IgnoredTagHandler.php
│ │ ├── ImgHandler.php
│ │ ├── ListHandler.php
│ │ ├── NpHandler.php
│ │ ├── PHandler.php
│ │ ├── PageFooterHandler.php
│ │ ├── PageHeaderHandler.php
│ │ ├── SpanHandler.php
│ │ ├── TableHandler.php
│ │ ├── TagHandler.php
│ │ ├── TagHandlerInterface.php
│ │ ├── TbodyHandler.php
│ │ ├── TdHandler.php
│ │ ├── ThHandler.php
│ │ ├── TheadHandler.php
│ │ └── TrHandler.php
│ ├── Utils/ # Утилиты
│ │ └── Misc.php
│ ├── OdtGenerator.php # Основной класс генератора
│ ├── OdtGeneratorInterface.php
│ ├── OdtArchiver.php # Класс для работы с ZIP-архивами
│ ├── OdtArchiverInterface.php
│ ├── StyleGenerator.php # Генератор стилей
│ ├── StyleGeneratorInterface.php
│ ├── StyleHelper.php # Утилиты для преобразования стилей
│ └── TagHandlerFactory.php # Фабрика обработчиков тегов
├── tests/ # Тесты
│ ├── OdtGeneratorTest.php
│ ├── OdtArchiverTest.php
│ └── TableWidthTest.php
├── composer.json # Конфигурация Composer
└── LICENSE # Лицензия GPL-3.0-or-later
# Установка зависимостей
composer install
# Запуск всех тестов
composer test
# Или напрямую через PHPUnit
vendor/bin/phpunit- Поддержка кириллицы и UTF-8
- Преобразование CSS-стилей в формат ODF
- Работа с таблицами, изображениями и текстовым форматированием
- Возможность кастомизации через внедрение зависимостей
- Полное покрытие тестами
GPL-3.0-or-later
Belokopytov Konstantin
- Email: dr.belkod@yandex.ru
- Website: https://belkod.ru
Приветствуются pull request'ы и сообщения об ошибках через GitHub Issues.