我创建了一个功能性Angular应用程序,其中包含多个网格(使用ag-grid创建)。现在,我需要以DOcument一词的形式在报告中提取该信息。
使用officegen模块:
Officegen module 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文件在您的后端node.js中运行 服务器上的环境与您的前端javascript隔离 在客户端计算机上的浏览器内部运行。唯一的办法,他们可以 通过HTTP调用进行通信。为此,您需要 创建一条可以从您的客户处到达的路线。另外,你需要 通过查询字符串传递参数:/ save?url = path
Angular应用程序在浏览器中运行。不在服务器上的NodeJS中。 在浏览器中无法访问文件系统,并且您不能 在那使用NodeJS特定的模块
因此很清楚为什么我要面对fs的问题。
最后,这是我的问题:
1 /在我的Angular应用程序中实现generateReport代码的正确方法是什么?
2 /关于文件的前端/后端通信的任何提示?
谢谢:)