ONLYOFFICE DocumentBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛


рд╣рд╛рдп, рд╣реИрдмреНрд░ред


рдореИрдВ DocumentBuilder рдирд╛рдордХ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдмрд┐рд▓реНрдбрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЖрдк рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ js рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рддреЛ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдпрджрд┐ рдЖрдк рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ:


  • рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдкреАрдврд╝реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдРрд╕реА рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ Node.js (рдПрдХреНрд╕рдкреНрд░реЗрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред


рдпреЛрдЬрдирд╛:


  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рдкрддреНрд░ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. Node.js рд╕рд░реНрд╡рд░ рдкрд░, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред
  3. Node.js рдмрд┐рд▓реНрдбрд░ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрддрд╛ рд╣реИред
  4. рдмрд┐рд▓реНрдбрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рддрд╛ рд╣реИред
  5. Node.js рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рд░реВрдк рд░рдЪрдирд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛ред рдлрд╝реЙрд░реНрдо рдореЗрдВ 8 рдлрд╝реАрд▓реНрдб рд╣реЛрдВрдЧреЗ: "рдкреВрд░реНрдг рдирд╛рдо", "рдлрд╝реЛрди рдирдВрдмрд░", "рдИрдореЗрд▓", "рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓", "рдбрд┐рдЧреНрд░реА", "рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп", "рд╕реНрдерд╛рди", "рд╡рд░реНрд╖", "рдХреМрд╢рд▓"ред рдХреМрд╢рд▓ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдХреНрд▓реЛрди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ index.html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред


<div class="fill-name"> <input type="text" id="fill-name" placeholder="full name"> </div> <div class="phone-number"> <input type="number" id="phone-number" placeholder="phone number"> </div> <div class="email"> <input type="text" id="email" placeholder="email"> </div> <div class="profile"> <textarea id="profile" placeholder="Insert a brief description of yourself"></textarea> </div> <div class="education"> <input type="text" id="degree" placeholder="degree"> <input type="text" id="university" placeholder="university"> <input type="text" id="location" placeholder="location"> <input type="date" id="year" placeholder="year"> </div> <div class="skills"> <div class="skill"> <input type="text" id="new-skill" placeholder="skill" onkeyup="add_skill_by_enter(event)"> <button onclick="add_skill()">+</button> </div> </div> 

рдпрд╣рд╛рдВ рдореИрдВ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: add_skill_by_enter (рдШрдЯрдирд╛) рдФрд░ add_skill ()ред рдЙрдиреНрд╣реЗрдВ + рдпрд╛ Enter рдмрдЯрди рджрдмрд╛рдХрд░ рдХрдИ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдХрд░реВрдВрдЧрд╛ред


рд╕рд░реНрд╡рд░ рдореЗрдВ рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ:


 <button onclick="sendForm()">Send</button> 

рдЕрдм рд╣рдо рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗред


рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп add_skill () рд╣реИ


 add_skill = () => { const newSkill = document.getElementById("new-skill"); if (newSkill.value === '') {return; } //   ,       const div = document.createElement("div"); .// div const span = document.createElement("span"); //   const button = document.createElement("button"); //    span.innerText += newSkill.value; //   span   newSkill.value = ''; //      newSkill.focus(); //        button.innerText += "-"; button.onclick = () => { //      div.remove(); }; div.appendChild(span); //  span  div div.appendChild(button); //   document.getElementsByClassName('skills')[0].appendChild(div); //     }; add_skill_by_enter() add_skill_by_enter = (event) => { if (event.code === "Enter") { //  ,      enter add_skill(); } }; 

рд╣рдо рдЦреЗрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


  get_skill_values = () => { const skills = []; if (document.getElementById('new-skill').value !== '') { skills.push(document.getElementById('new-skill').value); } Array.from(document.getElementsByClassName('skillfield')).forEach(current_element => { skills.push(current_element.innerHTML); }); return skills; }; sendForm() sendForm = () => { fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userData: { fillName: document.getElementById('fill-name').value, phoneNumber: document.getElementById('phone-number').value, email: document.getElementById('email').value, profile: document.getElementById('profile').value, education: { degree: document.getElementById('degree').value, university: document.getElementById('university').value, location: document.getElementById('location').value, year: document.getElementById('year').value, }, skills: get_skill_values() } }) }).then(res => res.json()) .then(response => { location.replace('/' + response.filename); //  ,       }) .catch(error => console.error('Error:', error)); }; 

рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб


рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдкрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдХрдиреЗрдХреНрд╢рди, рд╕рд░реНрд╡рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдкрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдФрд░ рдкрдж рдХреЗ рддрд░реАрдХреЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:


 const path = require('path'); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); app.get('/', (req, res) => { res.sendFile(path.join(__dirname + '/index.html')); }); app.post('/', (req, res) => { //        }); app.listen(3000, () => console.log(`Example app listening on port ${3000}!`)); 

рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЪрд▓рд╛рдПрдВ:
node main.js


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрддрд╛ рдЦреЛрд▓реЗрдВ:
http:localhost:3000


рд╣рдо рдирд┐рд░реНрдорд┐рдд рд░реВрдк рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рддреЗ рд╣реИрдВ:


рд╣рдореЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд json рдорд┐рд▓рддрд╛ рд╣реИ:


 {"userData":{"fillName":"Rotatyy Dmitryi","phoneNumber":"89879879898","email":"flamine@list.ru","profile":"Hi, my name is Joe\nAnd I work in a button factory\nI got a wife and two kids\nOne day, my boss says, тАЬJoe, are you busy?тАЭ\nI said, тАЬnoтАЭ\nтАЬThen push this button with your right handтАЭ","country":"Russia","city":"Nizhniy Novgorod","education":{"degree":"Master of Pupets","university":"Nizhny novgorod state technical university","location":"Nizhniy Novgorod","year":"2015-05-02"},"skills":["apple.js","vintage.js","zerg.js","css","html","linux"]}}; 

рдЕрдм рдЖрдкрдХреЛ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдерд╛ рдЬреЛ Google рдбреЙрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ)ред


рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЫрд╡рд┐


рдЗрд╕ рдбреЗрдЯрд╛ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдбрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдЧрд╛ред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ ONLYOFFICE рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдПрдХ рдореИрдХреНрд░реЛ рд▓рд┐рдЦрдирд╛ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдЧрд╛ред рдФрд░ рдлрд┐рд░ рдореИрдХреНрд░реЛ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдмрдЪрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ - рдЖрдкрдХреЛ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдмрд┐рд▓реНрдбрд░ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛


рд╣рдо рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЖрдП рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


 const Document = Api.GetDocument(); const data = {"userData":{"fillName":"Rotatyy Dmitryi","phoneNumber":"89879879898","email":"flamine@list.ru","profile":"Hi, my name is Joe\nAnd I work in a button factory\nI got a wife and two kids\nOne day, my boss says, тАЬJoe, are you busy?тАЭ\nI said, тАЬnoтАЭ\nтАЬThen push this button with your right handтАЭ","country":"Russia","city":"Nizhniy Novgorod","education":{"degree":"Master of Pupets","university":"Nizhny novgorod state technical university","location":"Nizhniy Novgorod","year":"2015-05-02"},"skills":["apple.js","vintage.js","zerg.js","css","html","linux"]}}; 

рдЕрдм рдЖрдкрдХреЛ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмреЛрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ 1.15 рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд░рд┐рдХреНрддрд┐ рд╣реИред


 let paragraph = document.GetElement(0); //       FullName_style = Document.CreateStyle("FullName"); //    FullName_style.GetTextPr().SetFontSize(28); //    FullName_style.GetTextPr().SetBold(true); //  bold paragraph.SetStyle(FullName_style); //      paragraph.SetSpacingLine(1.15 * 240, "auto"); //    paragraph.AddText(data.userData.fillName); //     

рд╣рдо рд╢реЗрд╖ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 // Country and city const CountryCity_style = Document.CreateStyle("CountryCity"); CountryCity_style.GetTextPr().SetFontSize(20); CountryCity_style.GetTextPr().SetCaps(true); CountryCity_style.GetTextPr().SetBold(true); paragraph = Api.CreateParagraph(); paragraph.AddText(data.userData.country + ', ' + data.userData.city); paragraph.SetStyle(CountryCity_style); paragraph.SetSpacingAfter(0); Document.Push(paragraph); // phone number const PhoneNumber_style = Document.CreateStyle("PhoneNumber"); PhoneNumber_style.GetTextPr().SetFontSize(20); PhoneNumber_style.GetParaPr().SetSpacingAfter(0); PhoneNumber_style.GetTextPr().SetBold(true); paragraph = Api.CreateParagraph(); paragraph.AddText(data.userData.phoneNumber); paragraph.SetStyle(PhoneNumber_style); Document.Push(paragraph); // email const Email_style = Document.CreateStyle("Email"); Email_style.GetTextPr().SetFontSize(18); Email_style.GetParaPr().SetSpacingAfter(0); Email_style.GetTextPr().SetBold(true); paragraph = Api.CreateParagraph(); paragraph.AddText(data.userData.email); paragraph.SetStyle(Email_style); Document.Push(paragraph); // SectionHeader style const SectionHeader = Document.CreateStyle("SectionHeader"); SectionHeader.GetTextPr().SetBold(true); SectionHeader.GetTextPr().SetColor(247, 93, 93, false); SectionHeader.GetTextPr().SetFontSize(28); SectionHeader.GetParaPr().SetSpacingBefore(1.33 * 240); SectionHeader.GetParaPr().SetSpacingLine(1 * 240, "auto"); // add header Profile: paragraph = Api.CreateParagraph(); paragraph.AddText("Profile:") paragraph.SetStyle(SectionHeader); Document.Push(paragraph); // add profile text: paragraph = Api.CreateParagraph(); paragraph.AddText(data.userData.profile) Document.Push(paragraph); // add header Education: paragraph = Api.CreateParagraph(); paragraph.AddText("Education:") paragraph.SetStyle(SectionHeader); Document.Push(paragraph); // add education year: const EducationYear_style = Document.CreateStyle("EducationYear"); EducationYear_style.GetTextPr().SetColor(102, 102, 102); EducationYear_style.GetTextPr().SetFontSize(18); EducationYear_style.GetParaPr().SetSpacingAfter(0); paragraph = Api.CreateParagraph(); paragraph.SetStyle(EducationYear_style); paragraph.AddText(data.userData.education.year) Document.Push(paragraph); // add education university: paragraph = Api.CreateParagraph(); run = Api.CreateRun(); run.AddText(data.userData.education.university) run.AddText(', ') run.AddText(data.userData.education.location) run.SetBold(true); paragraph.AddElement(run); run = Api.CreateRun(); run.AddText(' тАУ ' + data.userData.education.degree) paragraph.AddElement(run); Document.Push(paragraph); // add header Skills: paragraph = Api.CreateParagraph(); paragraph.AddText("Skills:") paragraph.SetStyle(SectionHeader); Document.Push(paragraph); // add skills text: paragraph = Api.CreateParagraph(); const skills = data.userData.skills.map(x => ' ' + x).toString(); paragraph.AddText(skills) Document.Push(paragraph); 

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓рддреЗ рд╣реИрдВ:


рдЕрдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ -> рдлрд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ -> рдмрд┐рд▓реНрдбрд░ рдХреЛ рдлрд╛рдЗрд▓ рджреЗрддреЗ рд╣реИрдВ -> рдлрд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рдпреВрдЬрд░ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред


рд╣рдо Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрдб-рдСрди рдХрд╛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдлрд╝реЛрд▓реНрдбрд░ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рддреЗ рд╣реИрдВ:


 const {exec} = require('child_process'); const fs = require('fs'); app.use(express.static('public')); 

рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкрд╛рда рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛ - рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдЪрд░рд┐рддреНрд░ рдЬреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред


 generate_script = (data) => { let first_template = 'builder.CreateFile("docx");\n' + 'const Document = Api.GetDocument();\n'; first_template += 'const data = ' + JSON.stringify(data) + ';\n'; first_template += 'let paragraph = Document.GetElement(0);\n' + 'FullName_style = Document.CreateStyle("FullName");\n' + ....   ~~~~~~~~~~~ return first_template; }; 

рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрд╕реЗ рдмрд┐рд▓реНрдбрд░ рдХреЛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдЗрд╕ рддрдереНрдп рдХреЛ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ documentbuilder path/script.js Node.js рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╣рдо рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдХрд░реЗрдЧрд╛:


 build = (data, res) => { const filename = Math.random().toString(36).substring(7) + '.docx'; //    let script = generate_script(data); script += 'builder.SaveFile("docx", "' + __dirname + '/public/' + filename + '");\n' + 'builder.CloseFile();'; fs.writeFile('public/' + filename + 'js', script, () => { exec('documentbuilder ' + 'public/' + filename + 'js', () => { res.send({'filename': filename }); }); }); }; 

рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ (req.body, res); рдЬрдм рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз


 app.post('/', (req, res) => { build(req.body, res); }); 

рдФрд░ рдЖрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред


рддреЛ рдЖрдк рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ ONLYOFFICE DocumentBuilder рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдпрд╛ рдкреАрдПрдо рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рднреА) рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/hi466217/


All Articles