Я создал функциональное приложение Angular, которое содержит несколько сеток (созданных с помощью ag-grid).Теперь мне нужно извлечь эту информацию в отчете в форме слова DOcument.
Используя модуль officegen:
Модуль Officegen npm
generateReport.js
const officegen = require('officegen')
const fs = require('fs')
// Create an empty Word object:
let docx = officegen('docx')
// Officegen calling this function after finishing to generate the docx document:
docx.on('finalize', function(written) {
console.log(
'Finish to create a Microsoft Word document.'
)
})
// Officegen calling this function to report errors:
pptx.on('error', function(err) {
console.log(err)
})
// Create a new paragraph:
let pObj = docx.createP()
pObj.addText('Simple')
pObj.addText(' with color', { color: '000088' })
pObj.addText(' and back color.', { color: '00ffff', back: '000088' })
pObj = docx.createP()
pObj.addText('Since ')
pObj.addText('officegen 0.2.12', {
back: '00ffff',
shdType: 'pct12',
shdColor: 'ff0000'
}) // Use pattern in the background.
pObj.addText(' you can do ')
pObj.addText('more cool ', { highlight: true }) // Highlight!
pObj.addText('stuff!', { highlight: 'darkGreen' }) // Different highlight color.
pObj = docx.createP()
pObj.addText('Even add ')
pObj.addText('external link', { link: 'https://github.com' })
pObj.addText('!')
pObj = docx.createP()
pObj.addText('Bold + underline', { bold: true, underline: true })
pObj = docx.createP({ align: 'center' })
pObj.addText('Center this text', {
border: 'dotted',
borderSize: 12,
borderColor: '88CCFF'
})
pObj = docx.createP()
pObj.options.align = 'right'
pObj.addText('Align this text to the right.')
pObj = docx.createP()
pObj.addText('Those two lines are in the same paragraph,')
pObj.addLineBreak()
pObj.addText('but they are separated by a line break.')
docx.putPageBreak()
pObj = docx.createP()
pObj.addText('Fonts face only.', { font_face: 'Arial' })
pObj.addText(' Fonts face and size.', { font_face: 'Arial', font_size: 40 })
docx.putPageBreak()
pObj = docx.createP()
// We can even add images:
pObj.addImage('some-image.png')
// Let's generate the Word document into a file:
let out = fs.createWriteStream('example.docx')
out.on('error', function(err) {
console.log(err)
})
// Async call to generate the output file:
docx.generate(out)
Работает:
узел generateReport.js
Создает текстовый документ в той же папке этого файла.Документ Word содержит всю информацию, детализированную в коде.
До сих пор это прекрасно работало.
Однако я уже несколько дней пытаюсь интегрировать этот код в мое приложение Angular, главным образом из-замодуль fs.
Сначала я попытался реализовать этот код в обычном сервисе Angular.Это не сработало.
Проведя некоторые исследования, я узнал, что:
нет способа получить доступ к fs в клиенте.
Проблема в том, что файлы jsзапуск в вашей среде backend node.js на сервере изолирован от вашего внешнего javascript, работающего внутри браузера на клиентском компьютере.Единственный способ, которым они могут общаться через HTTP-вызовы.Для этого вам нужно создать маршрут, по которому можно добраться от вашего клиента.Также вам нужно передать параметры через строку запроса: / save? Url = путь
В браузере запускаются угловые приложения.Не в NodeJS на сервере.Нет доступа к файловой системе в браузере, и вы не можете использовать специфичные для NodeJS модули там
Так что стало понятно, почему у меня возникли проблемы с fs.
Наконец, здесьмои вопросы:
1 / Каков правильный способ реализации кода generateReport в моем приложении Angular?
2 / Есть ли какие-либо советы по работе с этим интерфейсным / внутренним взаимодействием, когда дело касается файлов?
Спасибо :)