1, officegen 模块可以为Microsoft Office 2007及更高版本生成Office Open XML文件。此模块不依赖于任何框架,您不需要安装Microsoft Office,因此您可以将它用于任何类型的 JavaScript 应用程序。输出也是流而不是文件,不依赖于任何输出工具。此模块应适用于支持Node.js 0.10或更高版本的任何环境,包括Linux,OSX和Windows。
2, textract 文本提取节点模块。
3, pdf2json 是一个节点。js模块解析和转换PDF从二进制到json格式,它是用PDF构建的。并通过浏览器外的交互式表单元素和文本内容解析对其进行扩展。其目标是在web服务中包装时启用带有交互式表单元素的服务器端PDF解析,并在作为命令行实用程序使用时启用将本地PDF解析为json文件。
1.2,需求
二,文件生成导出
第一步:安装 officegen
cnpm install officegen --save
第二步:引入officegen
var officegen = require('officegen'); var fs = require('fs'); var docx = officegen('docx');//word var pptx = officegen('pptx');//pptx
第三步:使用officegen docx
... docx.on('finalize', function (written) { console.log('Finish to create Word file.\nTotal bytes created: ' + written + '\n'); }); docx.on('error', function (err) { console.log(err); }); ... //var tows = ['id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn'];//创建一个和表头对应且名称与数据库字段对应数据,便于循环取出数据 var pObj = docx.createP({ align: 'center' });// 创建行 设置居中 大标题 pObj.addText('全国所有城市', { bold: true, font_face: 'Arial', font_size: 18 });// 添加文字 设置字体样式 加粗 大小 // let towsLen = tows.length let dataLen = data.length for (var i = 0; i < dataLen; i++) {//循环数据库得到的数据,因为取出的数据格式为 //[{"id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"},{…………},{…………}] /************************* 文本 *******************************/ // var pObj = docx.createP();//创建一行 // pObj.addText(`(${i+1}), `,{ bold: true, font_face: 'Arial',}); // pObj.addText(`省级:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['provinceZh']} `,); // pObj.addText(`市级:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['leaderZh']} `); // pObj.addText(`县区:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['cityZh']}`); /************************* 表格 *******************************/ let SingleRow = [data[i]['id'], data[i]['provinceZh'], data[i]['leaderZh'], data[i]['cityZh']] table.push(SingleRow) } docx.createTable(table, tableStyle); var out = fs.createWriteStream('out.docx');// 文件写入 out.on('error', function (err) { console.log(err); }); var result = docx.generate(out);// 服务端生成word res.writeHead(200, { // 注意这里的type设置,导出不同文件type值不同application/vnd.openxmlformats-officedocument.wordprocessingml.document "Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 'Content-disposition': 'attachment; filename=out' + moment(new Date().getTime()).format('YYYYMMDDhhmmss') + '.docx' }); docx.generate(res);// 客户端导出word
第四步:抛出接口
router.put('/download/word', function (req, res) { console.log('exportWord-------------'); docx.on('finalize', function (written) { console.log('Finish to create Word file.\nTotal bytes created: ' + written + '\n'); }); docx.on('error', function (err) { console.log(err); }); let fields = { id: '', provinceZh: '', leaderZh: '', cityZh: '', cityEn: '' } var table = [ [{ val: "No.", opts: { align: "center", vAlign: "center", sz: '36', // cellColWidth: 42, // b:true, // sz: '48', // shd: { // fill: "7F7F7F", // themeFill: "text1", // "themeFillTint": "80" // }, // fontFamily: "Avenir Book" } }, { val: "省份", opts: { align: "center", vAlign: "center", sz: '36', // b:true, // color: "A00000", // align: "right", // shd: { // fill: "92CDDC", // themeFill: "text1", // "themeFillTint": "80" // } } }, { val: "市", opts: { align: "center", vAlign: "center", sz: '36', // cellColWidth: 42, // b:true, // sz: '48', // shd: { // fill: "92CDDC", // themeFill: "text1", // "themeFillTint": "80" // } } }, { val: "区/县", opts: { align: "center", vAlign: "center", sz: '36', // cellColWidth: 42, // b:true, // sz: '48', // shd: { // fill: "92CDDC", // themeFill: "text1", // "themeFillTint": "80" // } } }], ] var tableStyle = { tableColWidth: 2400, tableSize: 24, tableColor: "ada", tableAlign: "center", tableVAlign: "center", tableFontFamily: "Comic Sans MS", borders: true } MongoDbAction.getFieldsByConditions('AllCity', {}, fields, function (err, data) {//根据需求查询想要的字段 if (err) { //执行出错 } else { //var tows = ['id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn'];//创建一个和表头对应且名称与数据库字段对应数据,便于循环取出数据 var pObj = docx.createP({ align: 'center' });// 创建行 设置居中 大标题 pObj.addText('全国所有城市', { bold: true, font_face: 'Arial', font_size: 18 });// 添加文字 设置字体样式 加粗 大小 // let towsLen = tows.length let dataLen = data.length for (var i = 0; i < dataLen; i++) {//循环数据库得到的数据,因为取出的数据格式为 //[{"id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"},{…………},{…………}] /************************* 文本 *******************************/ // var pObj = docx.createP();//创建一行 // pObj.addText(`(${i+1}), `,{ bold: true, font_face: 'Arial',}); // pObj.addText(`省级:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['provinceZh']} `,); // pObj.addText(`市级:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['leaderZh']} `); // pObj.addText(`县区:`,{ bold: true, font_face: 'Arial',}); // pObj.addText(`${data[i]['cityZh']}`); /************************* 表格 *******************************/ let SingleRow = [data[i]['id'], data[i]['provinceZh'], data[i]['leaderZh'], data[i]['cityZh']] table.push(SingleRow) } docx.createTable(table, tableStyle); var out = fs.createWriteStream('out.docx');// 文件写入 out.on('error', function (err) { console.log(err); }); var result = docx.generate(out);// 服务端生成word res.writeHead(200, { // 注意这里的type设置,导出不同文件type值不同application/vnd.openxmlformats-officedocument.wordprocessingml.document "Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 'Content-disposition': 'attachment; filename=out' + moment(new Date().getTime()).format('YYYYMMDDhhmmss') + '.docx' }); docx.generate(res);// 客户端导出word } }); });
第五步:前端调用
下载调用方法