Бесплатная библиотека Go для преобразования HTML‑документов в текст
HTML2Text — очень простая открытая библиотека Go, способная преобразовывать разметку HTML в читаемый человеком обычный текст в приложениях Go.
В современном цифровом ландшафте контент должен быть доступен в разных форматах и на различных платформах. HTML2Text — мощная библиотека Go, созданная Джейем Тейлором, решающая фундаментальную задачу: преобразование HTML‑контента в читаемый, хорошо отформатированный простой текст. Изначально разработанная для обеспечения читаемости HTML‑письм для всех получателей — включая тех, у кого отключён HTML в клиентах или есть требования доступности — эта библиотека превратилась в универсальный инструмент для разработчиков, работающих с преобразованием контента.
Библиотека преобразует сложные структуры HTML, включая таблицы, списки и ссылки, в чистый текст в стиле markdown, сохраняя логическую структуру и читаемость. В библиотеку входит несколько важных функций, таких как интеллектуальное преобразование HTML в текст, рендеринг таблиц с красивым форматированием, настраиваемые параметры конвертации, интерфейс командной строки и т.д. HTML2Text написан на чистом Go без внешних зависимостей, что делает его быстрым для типичных HTML‑документов, экономичным по памяти благодаря потоково‑ориентированному дизайну и потокобезопасным для одновременного использования в веб‑серверах. Благодаря простому API, гибким настройкам и проверенной репутации в тысячах проектов, HTML2Text заслуживает места в вашем наборе инструментов Go.
Начало работы с HTML2Text
Рекомендуемый и самый простой способ установить HTML2Text — использовать GitHub. Пожалуйста, выполните следующую команду для быстрой установки.
Установите библиотеку HTML2Text через GitHub
go get jaytaylor.com/html2textБиблиотека требует Go 1.x или новее и не имеет внешних зависимостей, что делает ваш проект лёгким. Вы также можете установить её вручную; загрузите последние файлы релиза напрямую из репозитория GitHub.
Базовое преобразование HTML в текст с помощью Go
Открытая библиотека HTML2Text упрощает разработчикам программ загрузку и конвертацию HTML‑файлов в текстовый формат внутри их Go‑приложений. HTML2Text не просто удаляет теги — она интеллектуально интерпретирует структуру HTML, чтобы создавать читаемый человеком вывод с семантическим пониманием заголовков, абзацев и списков, сохраняет ссылки, отображая URL в скобках после текста ссылки, нормализует пробелы, поддерживая читаемость без избыточных разрывов строк, поддерживает кодировки символов, включая UTF-8 с BOM (Byte Order Mark). Ниже приведён полный пример использования библиотеки, позволяющий загружать и конвертировать HTML в текстовый формат внутри Go‑приложений.
Как преобразовать простой HTML‑контент в текстовый формат с помощью библиотеки Go?
package main
import (
"fmt"
"jaytaylor.com/html2text"
)
func main() {
html := `
Добро пожаловать в наш сервис
Ознакомьтесь с нашей страницей функций
для получения дополнительной информации о том, что мы предлагаем.
- Поддержка 24/7
- Бесплатный пробный период
- Корпоративные планы
`
text, err := html2text.FromString(html, html2text.Options{})
if err != nil {
panic(err)
}
fmt.Println(text)
}
Отображение таблиц с красивым форматированием
Одной из выдающихся возможностей HTML2Text является способность преобразовывать HTML‑таблицы в текстовые таблицы на основе ASCII. Таблицы в обычном тексте обычно превращаются в путаный набор данных. Функция PrettyTables сохраняет табличную структуру с помощью ASCII‑искусства, делая числовые данные, прайс‑листы или сравнительные диаграммы читаемыми в любом контексте. Это идеально подходит для автоматических отчетов, отправляемых по электронной почте, вывода инструментов командной строки или SMS‑уведомлений, где важна структура данных. Ниже приведён пример кода, показывающий, как разработчики могут преобразовать HTML‑таблицу в отформатированную ASCII‑таблицу с помощью команд Go.
Как преобразовать HTML‑таблицу в отформатированную ASCII‑таблицу с помощью Go?
func sendMonthlyReport(userEmail string, metricsHTML string) {
// Convert HTML table to formatted ASCII table
textReport, _ := html2text.FromString(metricsHTML, html2text.Options{
PrettyTables: true, // Preserves table structure visually
})
// Even in plain text, the data remains organized:
// +----------------+-----------+
// | METRIC | VALUE |
// +----------------+-----------+
// | Page Views | 24,589 |
// | Conversion Rate| 2.4% |
// +----------------+-----------+
sendEmail(userEmail, "Monthly Report", textReport)
}
Создание резервного email с помощью библиотеки Go
Одним из самых распространённых вариантов использования HTML2Text является преобразование HTML‑шаблонов электронных писем в их текстовые эквиваленты. Почтовые клиенты сильно различаются в возможностях рендеринга HTML. Некоторые пользователи, заботящиеся о безопасности, полностью отключают HTML, тогда как более старые клиенты или скрин‑ридеры для людей с нарушениями зрения часто работают лучше с простым текстом. Предоставление текстовой альтернативы — это не просто хорошая практика, а необходимость для доступности и доставки. Автоматически генерируя синхронные версии в виде простого текста, вы гарантируете, что каждый получатель сможет прочитать ваш контент, уменьшаете срабатывание спам‑фильтров и соблюдаете стандарты доступности, такие как WCAG.
Как создать текстовую альтернативу электронного письма с помощью библиотеки Go?
func sendTransactionalEmail(userEmail, htmlContent string) error {
// Generate plain text fallback
textContent, err := html2text.FromString(htmlContent, html2text.Options{})
if err != nil {
return fmt.Errorf("failed to create text alternative: %v", err)
}
// Send multipart email (both HTML and text)
email := &Email{
To: userEmail,
HTMLBody: htmlContent,
TextBody: textContent, // Critical for users with HTML disabled
}
return emailService.Send(email)
}
Работа со ссылками при преобразовании HTML в текст
Библиотека HTML2Text полностью поддерживает обработку ссылок при преобразовании HTML в текст. Ссылки особенно важны в HTML‑контенте, и html2text гарантирует сохранение как текста ссылки, так и URL. Текст ссылки отображается обычным образом, а фактический URL добавляется в скобках, что позволяет читателям версии в виде простого текста всё ещё получать доступ к связанным ресурсам. Ниже приведён пример, демонстрирующий, как этого добиться.
Как управлять ссылками при преобразовании HTML в текст в приложениях Go?
package main
import (
"fmt"
"log"
"jaytaylor.com/html2text"
)
func main() {
htmlContent := `
Посмотрите наш каталог продуктов
или посетите нашу страницу поддержки.
`
text, err := html2text.FromString(htmlContent)
if err != nil {
log.Fatal(err)
}
fmt.Println(text)
}