Сохранение новых строк и пробелов в WordProcessingML с использованием XSLT-преобразования
Я создаю текстовые документы программно с использованием WordprocessingML и не могу найти способ сохранить переводы строк в моих текстовых (w:t) блоках. Есть ответ, который не может сохранить пространство между запусками, которые адресуют пробелы:
t = new Text()
{
Text = "your text with spaces ",
Space = SpaceProcessingModeValues.Preserve
};
Однако я использую файл JavaScript, который создает структуру каталогов файла docx и выполняет преобразование xslt в исходном файле xml для создания основного файла document.xml, который использует это слово. Я не уверен, что у меня есть фактические низкоуровневые атрибуты WordprocessingML, которые соответствуют приведенному выше коду. Я пытался:
<w:t xml:space="preserve">
Doesn't work.</w:t>
а также
<w:t w:space="preserve">
Also, no joy.</w:t>
Можно ли это сделать или требуется несколько тегов абзаца (w: p)? Для простоты использования я бы предпочел, чтобы редакторы исходного XML-файла просто помещали нужные пробелы в один текстовый тег, вместо того, чтобы вручную добавлять дополнительные теги XML, такие как tab или абзац.
2 ответа
Если вы хотите добавить разрывы строк внутри абзаца, то вам нужно использовать w:br
элемент, который нужно вставить в бег (w:r
) элемент. Например, отображается следующая разметка Foo
а также Bar
с пустой строкой между ними.
<w:r>
<w:t>Foo</w:t>
<w:br/>
<w:br/>
<w:t>Bar</w:t>
</w:r>
Надлежащим атрибутом является xml:space="preserve", который можно найти, изучив правильно сконструированный тестовый файл docx, но он не позволяет переводить строки / изменять абзацы (он считает их как один пробел). Вкладки и пробелы работают внутри блоков w:t, но, к сожалению, мне пришлось использовать явный тег абзаца в моем исходном xml. Ответ в том, что это невозможно сделать (кроме как в фоновом режиме с вовлеченной обработкой строк, которая не будет стоить того).