Skip to content

Конвертация Office-документов в HTML

У каждого handle в Office Oxide есть метод to_html(), который выдаёт чистый семантический HTML5 из любого поддерживаемого формата. Подходит для предпросмотра в браузере, рендеринга писем и быстрого визуального сравнения.

Разовый вызов

Rust

use office_oxide::to_html;

let html = to_html("report.docx")?;
std::fs::write("report.html", html)?;

Python

import office_oxide

html = office_oxide.to_html("report.docx")
open("report.html", "w").write(html)

JavaScript

import { toHtml } from 'office-oxide';
import { writeFileSync } from 'node:fs';

writeFileSync('report.html', toHtml('report.docx'));

Go

html, err := officeoxide.ToHTML("report.docx")
os.WriteFile("report.html", []byte(html), 0o644)

C#

File.WriteAllText("report.html", OfficeOxide.ToHtml("report.docx"));

C

int err = 0;
char *html = office_to_html("report.docx", &err);   /* HTML fragment */
if (html) {
    FILE *f = fopen("report.html", "w");
    fputs(html, f);
    fclose(f);
    office_oxide_free_string(html);
}

Переиспользуемый handle

Rust

let doc = office_oxide::Document::open("slides.pptx")?;
let html = doc.to_html();

Python

from office_oxide import Document

with Document.open("slides.pptx") as doc:
    html = doc.to_html()

JavaScript

using doc = Document.open('slides.pptx');
const html = doc.toHtml();

C

int err = 0;
OfficeDocumentHandle *doc = office_document_open("slides.pptx", &err);
char *html = office_document_to_html(doc, &err);   /* HTML fragment */
if (html) { /* use html */ office_oxide_free_string(html); }
office_document_free(doc);

WASM

import { WasmDocument } from 'office-oxide-wasm';

const data = new Uint8Array(await (await fetch('/slides.pptx')).arrayBuffer());
using doc = new WasmDocument(data, 'pptx');
const html = doc.toHtml();   // HTML fragment

Что получается на выходе

HTML выдаётся в фрагментном виде — без оберток <html>, <head>, <body>. Куда встраивать и какой стиль применять — решаете вы.

Источник HTML-элемент
Заголовок <h1><h6> соответствующего уровня
Абзац <p>
Жирный / курсив / подчёркивание <strong>, <em>, <u>
Список <ul> / <ol> с дочерними <li>
Таблица <table> с <thead>, <tbody>, <tr>, <th>, <td>
Гиперссылка <a href="...">
Изображение <img src="..." alt="...">
XLSX-лист <section data-sheet="name"> + <table>
PPTX-слайд <section data-slide="N"> + body + опциональный <aside> для заметок

Вывод экранирован: пользовательский контент внутри документа HTML-эскейпится, поэтому встраивать результат на страницу безопасно по умолчанию.

Обёртка для самостоятельной страницы

Python

from office_oxide import Document

with Document.open("report.docx") as doc:
    body = doc.to_html()

page = f"""<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Report</title>
<link rel="stylesheet" href="docs.css">
</head><body>{body}</body></html>"""

open("report.html", "w").write(page)

Сценарии использования

  • Предпросмотр в браузере загружённых документов (<input type="file"> → WASM → <iframe srcdoc>)
  • Рендеринг писем для сгенерированных отчётов
  • Просмотр диффов — HTML-диффы наглядно отображаются в инструментах код-ревью
  • Поисковая индексация с сохранением структуры (заголовки могут поднимать релевантность результатов)

Смотрите также