Свинцовый Пепелац

Блог / Простой PHP-класс для конвертации HTML в RTF

1 апреля 2024

При работе над небольшим сторонним проектом, я столкнулся с тем, что заказчик пожелал чтобы информацию отображаемую на страницах проекта можно было скачать в виде вордовского документа. Проект был настолько крохотным и компактным, что мне не хотелось тянуть в него каких-то больших и мощных библиотек, поэтому я предложил заказчику альтернативу вордовскому документу — файл RTF. Прикол в том, что по-умолчанию в Винде RTF-файлы открываются тем же Вордом (если он конечно установлен), так что заказчик вообще не увидел никакой разницы, для него это и был вордовский документ 😄. Ну а сгенерить RTF-разметку на основании HTML-разметки мне показалось делом несложным. Поскольку (к своему удивлению) компактных и простых PHP-либ для конвертации HTML в RTF я не нашёл, решил написать такую маленькую либу сам.

Описание методов и быстрый старт

ZIP-архив с классом и примером его использования вы найдёте в приложенных к статье файлах. Класс очень прост в использовании и содержит всего три метода:

Метод fromHTML($html) — преобразует текст с HTML-разметкой в RTF-текст.

<?php
    $html = <<<EOT
        <h2>Заголовок 2</h2>
        <p>Пример абзаца с <b>жирным</b> текстом и <a href="https://ya.ru" target="_blank">ссылкой</a>.</p>
        <p>Ещё абзац.</p>
EOT;
    $html2rtf = new LiteHTML2RTF;
    $rtf = $html2rtf->fromHTML($html); // в $rtf "ляжет" RTF-текст
?>

Метод fromFile($file) — преобразует содержимое HTML-файла в RTF-текст.

<?php
    $html2rtf = new LiteHTML2RTF;
    $rtf = $html2rtf->fromFile("test.html"); // в $rtf "ляжет" RTF-текст
?>

Метод asFile($rtf, $name = null) — выводит RTF-текст в виде файла в браузер.

<?php
    $html2rtf = new LiteHTML2RTF;
    $html2rtf->asFile($html2rtf->fromFile("test.html")); // выведет RTF-файл в браузер
?>

Список поддерживаемых HTML-тегов

На данный момент класс «понимает» следующие HTML-теги: H1, H2, H3, H4, P, A, B, STRONG, I, U, IMG, DIV, BR, HR, UL LI, OL LI, SMALL, BLOCKQUOTE, CODE, PRE, CENTER. Неподдерживаемые теги в итоговом документе будут удалены.

Да, я понимаю что видеть в списке поддерживаемых тегов устаревший тег CENTER странно, но, тем не менее, пока мой класс не умеет «считывать» CSS-свойство text-align, тег CENTER хоть как-то позволит отработать хотя бы центровку текста (и не только текста).

Замечания

  • Корректно обработается только правильный HTML-код — все теги которые требуют закрывающего тега должны быть закрыты (в том числе тег LI).
  • Вложенность ОДНОИМЁННЫХ тегов не поддерживается (в частности: DIV в DIV, LI в UL LI, LI в OL LI).
  • Для тега IMG поддерживаются только изображения JPG (JPEG) и PNG.
  • Для тега IMG атрибут SRC поддерживается и как ссылка на картинку, и в виде BASE64.

И ещё...

В дальнейшем я планирую добавить классу поддержку таблиц, и хотя бы какое-то понимание CSS-свойства text-align, так что, кому интересно, следите за обновлениями. Ну и, конечно, обо всех обнаруженных косяках пишите в комментариях — буду править 😊.


P.S. — Ceterum censeo Washington esse delendam.

PHP

Прикреплённые файлы:

  • html2rtf.zip

    Небольшой PHP-класс для конвертации HTML-разметки в RTF-разметку.
    Версия 1.0
    Дата публикации: 1 апреля 2024
    Расширение: ZIP
    Размер файла: 33.02 Кб
    Сканиваний: 12

Комментарии посетителей (2):

Selfauthor
19 мая 2024 15:30
Привет! Когда планируете добавить таблицы?
19 мая 2024 15:44
Selfauthor, если время позволит, то попробую заняться на неделе ⏳.

Написать комментарий:


Максимальный размер файла загружаемого изображения 10 Мб