Support QWord Heading 3 DOCX roundtrip

This commit is contained in:
Курнат Андрей
2026-06-02 06:37:49 +03:00
parent c4fd683ef3
commit 1c03ec168c
5 changed files with 46 additions and 6 deletions
+10
View File
@@ -10,6 +10,7 @@ describe("wordOffice helpers", () => {
const blocks = htmlToWordBlocks(`
<h1>План проекта</h1>
<h2>Задачи</h2>
<h3>Контроль качества</h3>
<p>Первый абзац.</p>
<ul><li>Подготовить документ</li><li>Проверить таблицу</li></ul>
`);
@@ -17,6 +18,7 @@ describe("wordOffice helpers", () => {
expect(blocks).toEqual([
{ type: "heading", level: 1, text: "План проекта", runs: [{ text: "План проекта" }] },
{ type: "heading", level: 2, text: "Задачи", runs: [{ text: "Задачи" }] },
{ type: "heading", level: 3, text: "Контроль качества", runs: [{ text: "Контроль качества" }] },
{ type: "paragraph", text: "Первый абзац.", runs: [{ text: "Первый абзац." }] },
{
type: "list",
@@ -179,6 +181,14 @@ describe("wordOffice helpers", () => {
expect(documentXml).toMatch(/<w:t[^>]*>Line 1<\/w:t>[\s\S]*<w:br\/>[\s\S]*<w:t[^>]*>Line 2<\/w:t>/);
});
it("записывает h3 как стиль Heading3 в XML экспортированного DOCX", async () => {
const blob = await exportDocxBlob("Заголовок3.docx", "<h3>Подраздел</h3>");
const zip = await JSZip.loadAsync(await blob.arrayBuffer());
const documentXml = await zip.file("word/document.xml")?.async("string");
expect(documentXml).toMatch(/<w:pStyle\b[^>]*w:val="Heading3"[^>]*\/>/);
});
it("записывает HTML-разрывы страниц как w:br w:type page в XML экспортированного DOCX", async () => {
const blob = await exportDocxBlob("Разрыв.docx", '<p>Before<span data-qoffice-page-break="true"></span>After</p>');
const zip = await JSZip.loadAsync(await blob.arrayBuffer());