Preserve QWord quote style in DOCX

This commit is contained in:
Курнат Андрей
2026-06-02 06:49:30 +03:00
parent c75efaa766
commit 68e0678ca6
4 changed files with 60 additions and 9 deletions
+23
View File
@@ -46,6 +46,20 @@ describe("wordOffice helpers", () => {
]);
});
it("разбирает HTML blockquote как цитату QWord", () => {
const blocks = htmlToWordBlocks('<blockquote id="Quote1">Цитата <strong>важная</strong></blockquote>');
expect(blocks).toEqual([
{
type: "paragraph",
text: "Цитата важная",
runs: [{ text: "Цитата " }, { text: "важная", bold: true }],
bookmark: "Quote1",
quote: true
}
]);
});
it("сохраняет базовое inline-форматирование текста для DOCX", () => {
const blocks = htmlToWordBlocks(`
<p>Обычный <strong>полужирный</strong> <em>курсив</em> <u>подчеркнутый</u> <span style="font-weight: 700; font-style: italic; text-decoration-line: underline; color: #0f5fae; background-color: rgb(255, 242, 204);">все стили</span></p>
@@ -198,6 +212,15 @@ describe("wordOffice helpers", () => {
expect(documentXml).toMatch(/<w:pStyle\b[^>]*w:val="Heading6"[^>]*\/>/);
});
it("записывает blockquote как стиль Quote в XML экспортированного DOCX", async () => {
const blob = await exportDocxBlob("Цитата.docx", "<blockquote>Важная цитата</blockquote>");
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="Quote"[^>]*\/>/);
expect(documentXml).toContain("Важная цитата");
});
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());