Формат стилей Openxml - PullRequest
       14

Формат стилей Openxml

0 голосов
/ 15 января 2020

Я пытаюсь создать документ с помощью Open xml,

, когда добавляю стиль к стилям. xml и пытаюсь проверить его, я получаю следующую ошибку

Элемент имеет неожиданный дочерний элемент 'http://schemas.openxmlformats.org/wordprocessingml/2006/main: rFonts '

вот стили. xml:

<?xml version="1.0" encoding="UTF-8"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:style w:customStyle="true" w:styleId="33" w:type="paragraph">
<w:name w:val="Heading 1"/>
<w:basedOn w:val="Normal"/>
<w:next w:val="Normal"/>
<w:rPr>
<w:color w:val="E32020" w:themeColor="light2"/>
<w:rFonts w:ascii="Calibri Light"/>
<w:sz w:val="32"/>
</w:rPr>
</w:style>
</w:styles>

Может кто-нибудь помочь мне понять, что неправильно с моим стилем.

1 Ответ

0 голосов
/ 16 января 2020

Это, похоже, ошибка со стороны валидатора Open XML, которую вы можете игнорировать. Если вы посмотрите на спецификацию элемента w: rPr , то w:rFonts явно является допустимым дочерним элементом w:rPr. Если вы открываете документ в Word (как намекнул Синди), и Word не жалуется, у вас все в порядке.

Как также отметила Синди, в вашем определении стиля есть проблема, связанная с использованием Heading 1 в качестве стиля. имя. Поскольку имя встроенного стиля - heading 1 (обратите внимание на строчную букву «h»), это будет работать даже на уровне Open XML (но вы можете не увидеть свое точное имя стиля в Word, поскольку Word будет использовать «Заголовок» 1 "как отображаемое имя, по крайней мере, если ваш язык отображения - Engli sh). Однако Word изменит ваше значение w:styleId (в вашем примере это «33»). Правило состоит в том, что значение w:styleId является функцией значения w:name. Например, если значение w:name вашего стиля равно "My Style Name", соответствующее значение w:styleId должно быть "MyStyleName". По крайней мере это то, что Word будет использовать после сохранения документа в Word.

Для встроенных стилей имена локализованы и не совсем соответствуют этому правилу. Например, значение w:name встроенного стиля «Заголовок 1» равно «заголовок 1», а значение w:styleId - «Заголовок1» (обратите внимание на верхний регистр «H»), если вы выбрали Engli sh в качестве дисплея язык. Например, если вы выбрали немецкий или французский, значения w:styleId будут "berschrift1" или "Titre1", соответственно. Немецкое значение w:styleId на самом деле должно быть «Überschrift1» (обратите внимание на умляут), но Word просто удаляет умляутные символы из значений w:styleId.

В вашем случае, если вы придерживаетесь «Заголовок 1» В качестве имени стиля Word не может использовать «Heading1» (в версии Engli sh) и добавляет символ к значению w:styleId, чтобы иметь возможность различать эти стили.

Предполагая, что у вас есть Engli sh в качестве языка отображения, чтобы изменить встроенный стиль «Заголовок 1», вам понадобится что-то вроде следующего, которое в этом примере является просто стандартным стилем «Заголовок 1», используемым Word в Normal.dotx template.

  <w:style w:type="paragraph" w:styleId="Heading1">
    <w:name w:val="heading 1"/>
    <w:basedOn w:val="Normal"/>
    <w:next w:val="Normal"/>
    <w:link w:val="Heading1Char"/>
    <w:uiPriority w:val="9"/>
    <w:qFormat/>
    <w:rsid w:val="008A559F"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:before="240" w:after="0"/>
      <w:outlineLvl w:val="0"/>
    </w:pPr>
    <w:rPr>
      <w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/>
      <w:color w:val="2F5496" w:themeColor="accent1" w:themeShade="BF"/>
      <w:sz w:val="32"/>
      <w:szCs w:val="32"/>
    </w:rPr>
  </w:style>

Еще раз обратите внимание, что значение w:name - это «заголовок 1» с строчной буквой «h». Также обратите внимание на элемент w:rFonts, показывающий, что валидатор неверен.

...