Docxtemplater вставка простого XML
Я использую библиотеку DocxTemplater от edi9999 в качестве решения для создания отчетов.docx из шаблонов и данных JSON, и я доволен этим.
Однако теперь я должен выделить несколько слов в своих отчетах. Например, мне нужно заменить {contents}
с большим текстом, где выделены несколько слов.
Это означает, что у меня есть 2 решения здесь:
- Используйте какие-то маркеры внутри моих данных (например,
in this data one {highlight(red)}{word} is red
, которые затем интерпретируются DocxTemplater. - Прямо замените тег желаемым XML. Например, я заменяю
{contents}
с этим XML (хранится в моих данных JSON как"contents"
поле):<w:r> <w:rPr> <w:highlight w:val="cyan"/> </w:rPr> <w:t>lol</w:t> </w:r>
, Если я сделаю это сейчас, я получу свой XML, встроенный в<w:r><w:t>HERE</w:t></w:r>
, так что MS Word считает, что файл поврежден.
Для "сырых" XML-данных я хочу использовать какой-то специальный тег, такой как {@myXmlData}
, который не позволит библиотеке окружить содержимое <w:r><w:t></w:t></w:r>
,
Я думаю, что второе решение намного лучше и очень гибкое: оно позволяет пользователям использовать DocxTemplater, даже если оно не удовлетворяет некоторым их потребностям. Они могут просто использовать XML для своих очень специфических потребностей.
Я думаю, что это действительно отличная новая функция для библиотеки DocxTemplater.
Однако сейчас я просто хочу решить свою проблему, и у меня нет времени тщательно изучать или изменять код библиотеки.
Было бы здорово, если бы кто-то указывал на места в коде библиотеки и идеи, как легко расширить ее, чтобы добавить эту функцию.
РЕДАКТИРОВАТЬ: теперь эта функция поддерживается! Проверьте https://github.com/edi9999/docxtemplater/issues/7
1 ответ
Я реализовал это действительно после https://github.com/edi9999/docxtemplater/issues/7
Ты можешь написать
В вашем docx:
{} @RawXml
В ваших данных:
{
rawXml:'<w:p> <w:r> <w:rPr> <w:highlight w:val="cyan"/>
</w:rPr> <w:t>lol</w:t> </w:r> </w:p>'
}