
рд╣рд╛рдп, рд╣реИрдмреНрд░ред
рдореИрдВ DocumentBuilder рдирд╛рдордХ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд┐рд▓реНрдбрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЖрдк рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ js рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рддреЛ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ:
- рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдкреАрдврд╝реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕реА рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ Node.js (рдПрдХреНрд╕рдкреНрд░реЗрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдпреЛрдЬрдирд╛:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рдкрддреНрд░ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
- Node.js рд╕рд░реНрд╡рд░ рдкрд░, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред
- Node.js рдмрд┐рд▓реНрдбрд░ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрддрд╛ рд╣реИред
- рдмрд┐рд▓реНрдбрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рддрд╛ рд╣реИред
- 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; }
рд╣рдо рдЦреЗрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
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);
рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдкрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдХрдиреЗрдХреНрд╢рди, рд╕рд░реНрд╡рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдкрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдФрд░ рдкрдж рдХреЗ рддрд░реАрдХреЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
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) => {
рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЪрд▓рд╛рдПрдВ:
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);
рд╣рдо рд╢реЗрд╖ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдЕрдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ -> рдлрд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ -> рдмрд┐рд▓реНрдбрд░ рдХреЛ рдлрд╛рдЗрд▓ рджреЗрддреЗ рд╣реИрдВ -> рдлрд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рдпреВрдЬрд░ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рд╣рдо 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';
рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ (req.body, res); рдЬрдм рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз
app.post('/', (req, res) => { build(req.body, res); });
рдФрд░ рдЖрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред
рддреЛ рдЖрдк рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ ONLYOFFICE DocumentBuilder рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдпрд╛ рдкреАрдПрдо рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рднреА) рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред