3

我正在使用docxtemplater将 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 />

在word文档中..任何想法如何将其打印为

Languages
Tamil
Telugu
Hindi
English

Skills
JavaScript
jQuery
CSS

感谢任何帮助。

4

3 回答 3

3

我有同样的问题,我解决了:

doc = new Docxtemplater(zip, { linebreaks: true })
于 2021-02-08T21:19:18.630 回答
2

你可以做 :

在您的模板中:

{#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;    
})
于 2017-04-06T12:23:17.430 回答
1

@Gabriel B. 感谢您的提示。我试过这个,它对我有用:

var doc = new docxtemplater();
var zip = new jszip(content);

// allow line break with \n 
doc.loadZip(zip).setOptions({parser:retrieveCustomParser(), linebreaks:true});  

doc.setData(data);
于 2021-05-05T14:22:27.853 回答