Переводы строк или разрыв тегов с помощью docxtemplater

Я использую https://docxtemplater.com/ для преобразования данных JSON в документ Word. Документ генерирует нормально.

var sections = {"sections":[{"section_name":"Languages","data":"Tamil\nTelugu\nHindi\nEnglish","key":"8783"},{"section_name":"Skills","data":"JavaScript<br />jQuery<br />CSS<br />","key":"13486"}]};


 function loadFile(url,callback){
        JSZipUtils.getBinaryContent(url,callback);
    }

    loadFile("examples/doccc.docx",function(error,content){
        if (error) { throw error; };
        var zip = new JSZip(content);
        var doc=new Docxtemplater().loadZip(zip);
        doc.setOptions({nullGetter: function() {
           return ""; 
        }});
        doc.setData(sections);

        try {
            // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
            doc.render();
        }
        catch (error) {
            var e = {
                message: error.message,
                name: error.name,
                stack: error.stack,
                properties: error.properties,
            };
            console.log(JSON.stringify({error: e}));
            // The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
            throw error;
        }

        var out=doc.getZip().generate({
            type:"blob",
            mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        }); //Output the document using Data-URI
        saveAs(out,"output.docx");
    });

Это мой шаблон

{#sections}
    {section_name} - {data}
{/sections}

Он генерирует файл docx со всеми разделами, но новые строки "\n" и
теги печатаются буквально в документе.

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

В настоящее время его печать как

Languages
Tamil\nTelugu\nHindi\nEnglish
Skills
JavaScript<br />jQuery<br />CSS<br />

в документе слово.. Любая идея, как распечатать его как

Languages
Tamil
Telugu
Hindi
English

Skills
JavaScript
jQuery
CSS

Благодарен за любую помощь.

3 ответа

Решение

Ты можешь сделать:

В вашем шаблоне:

{#sections}
    {section_name} - 
{@data}
{/sections}

В вашем коде перед setData:

sections.forEach(function(section){
    var lines = section.data.split("\n").split(/<br \/>|\n/g)
    var pre = "<w:p><w:r><w:t>";
    var post = "</w:t></w:r></w:p>";
    var lineBreak = "<w:br/>";
    section.data = pre + lines.join(lineBreak) + post;    
})

У меня была такая же проблема, и я решил ее:

      doc = new Docxtemplater(zip, { linebreaks: true })

@ Габриэль Б. Спасибо за подсказку. Я пробовал это, и у меня это работает:

var doc = new docxtemplater();var zip = новый jszip (контент); doc.loadZip(zip).setOptions({парсер:retrieveCustomParser(), разрывы строк :true}); // разрешить разрыв строки с \n

doc.setData (данные);

Другие вопросы по тегам