2017-04-05 1 views
0

J'utilise docxtemplater pour convertir des données JSON en document Word. Le document génère bien.Newlines ou marques de rupture avec docxtemplater

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"); 
    }); 

Ceci est mon modèle

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

Il génère le fichier docx avec toutes les sections, mais le « \ n » de nouvelles lignes et
étiquettes impriment littéralement dans le document.

J'ai besoin que les nouvelles lignes soient interprétées comme une nouvelle ligne.

Actuellement son impression

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

dans le document de mot .. Toute idée comment imprimer comme

Languages 
Tamil 
Telugu 
Hindi 
English 

Skills 
JavaScript 
jQuery 
CSS 

Grateful pour toute aide.

Répondre

1

Vous pouvez faire:

Dans votre modèle:

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

Dans votre code, avant 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;  
}) 
+0

A travaillé. Merci. Si nous utilisons {@data} dans un modèle, il est obligatoire pour toutes les sections d'avoir les balises pré et post même s'il s'agit d'un texte brut, sinon le document Word reçoit une erreur lors de l'ouverture. –

+0

pouvez-vous également s'il vous plaît partager quelques exemples de code pour les questions d'espace ici https://github.com/open-xml-templating/docxtemplater/issues/272 Merci –