Docx: не получается получить маркированный список для рендеринга
Я строю документ DocX практически с нуля с помощью XML. У меня очень простая цель: создать список маркеров, как ul
в HTML. Читая спецификацию WordProcessingML для нумерованных списков (раздел 2.9), я создал то, что, как я думал, удовлетворит это. Вот что мой numbering.xml
похоже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:numbering xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:abstractNum w:abstractNumId="1">
<w:multiLevelType w:val="singleLevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="bullet"/>
<w:lvlText w:val="•"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:tabs>
<w:tab w:pos="360" w:val="num"/>
</w:tabs>
<w:ind w:hanging="360" w:left="360"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
</w:rPr>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="1"/>
</w:num>
</w:numbering>
Итак, у меня есть абстрактная нумерация с идентификатором 1, определенная одним уровнем с некоторым отступом и маркером как lvlText (символ •
отображается как •
). На абстрактную нумерацию 1 ссылается "фактическая" нумерация 1.
И вот что мой document.xml
похоже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:body>
<w:p w:rsidR="00851CFD" w:rsidRDefault="00851CFD">
<w:r>
<w:t>This is a test</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:numPr>
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>foo</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:numPr>
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>bar</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:numPr>
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>baz</w:t>
</w:r>
</w:p>
<w:sectPr w:rsidR="008E365B" w:rsidSect="008E365B">
<w:pgSz w:h="15840" w:w="12240"/>
<w:pgMar w:bottom="1440" w:gutter="0" w:left="1800" w:right="1800" w:top="1440"/>
</w:sectPr>
</w:body>
</w:document>
Там начальный абзац, а затем три строки, которые определяют numId
из 1
(указывая на нумерацию, которую мы определили ранее) и уровень отступа 0. Итак, мы должны получить что-то вроде:
Это тест
- Foo
- бар
- Baz
Но когда я открываю это в Microsoft Word, он вместо этого (примерно) как
Это тест
- Foo
- бар
- Baz
И когда я открываю его в Google Docs, он просто отображает текст:
Это тест
Foo
бар
Baz
Похоже, что я следую спецификации, изложенной в стандарте. Я не знаю, что мне не хватает. Почему пули не получают? Что я могу сделать здесь?
1 ответ
Убедитесь, что вы правильно ссылаетесь на нумерацию в своем документе. Word использует стандартную нумерацию (1, 2, 3, ...), когда не удается найти определение нумерации.
word/_rels/document.xml.rels
файл должен выглядеть так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"
Target="numbering.xml"/>
<!-- other relationships go here. -->
</Relationships>