Convertir documentos Office a HTML
Cada handle de Office Oxide incluye el método to_html(), que genera HTML5 limpio y semántico desde cualquier formato soportado. Ideal para vista previa en el navegador, renderización de correos o comparación visual rápida.
Llamada única
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 reutilizable
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
Qué se genera
El HTML se emite en formato fragmento — sin envoltorios <html>, <head> ni <body>. Tú decides dónde montarlo y qué hoja de estilos aplicar.
| Origen | Elemento HTML |
|---|---|
| Encabezado | <h1> … <h6> según el nivel de origen |
| Párrafo | <p> |
| Negrita / cursiva / subrayado | <strong>, <em>, <u> |
| Lista | <ul> / <ol> con hijos <li> |
| Tabla | <table> con <thead>, <tbody>, <tr>, <th>, <td> |
| Hipervínculo | <a href="..."> |
| Imagen | <img src="..." alt="..."> |
| Hoja XLSX | <section data-sheet="name"> + <table> |
| Diapositiva PPTX | <section data-slide="N"> + contenido + <aside> opcional para notas |
La salida está escapada: el contenido del usuario dentro del documento se escapa como HTML, así que incrustar el resultado en una página es seguro por defecto.
Envolver como página independiente
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)
Casos de uso
- Vista previa en el navegador de documentos subidos por el usuario (
<input type="file">→ WASM →<iframe srcdoc>) - Renderización de correos para informes generados
- Vistas de diferencias — los diffs en HTML se visualizan de forma útil en herramientas de revisión de código
- Indexación para búsqueda conservando la estructura (los encabezados pueden potenciar los resultados)
Véase también
- Extracción Markdown — cuando necesitas una salida más orientada a texto plano
- Extracción IR — JSON estructurado para renderizar por tu cuenta
- Inicio rápido WASM — para convertir directamente en el navegador