最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼

 更新時(shí)間:2019年04月01日 11:42:29   作者:jackson影琪  
這篇文章主要介紹了NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一,介紹與需求

 1.1,介紹

1, officegen 模塊可以為Microsoft Office 2007及更高版本生成Office Open XML文件。此模塊不依賴于任何框架,您不需要安裝Microsoft Office,因此您可以將它用于任何類型的 JavaScript 應(yīng)用程序。輸出也是流而不是文件,不依賴于任何輸出工具。此模塊應(yīng)適用于支持Node.js 0.10或更高版本的任何環(huán)境,包括Linux,OSX和Windows。

2, textract 文本提取節(jié)點(diǎn)模塊。

3, pdf2json 是一個(gè)節(jié)點(diǎn)。js模塊解析和轉(zhuǎn)換PDF從二進(jìn)制到j(luò)son格式,它是用PDF構(gòu)建的。并通過瀏覽器外的交互式表單元素和文本內(nèi)容解析對(duì)其進(jìn)行擴(kuò)展。其目標(biāo)是在web服務(wù)中包裝時(shí)啟用帶有交互式表單元素的服務(wù)器端PDF解析,并在作為命令行實(shí)用程序使用時(shí)啟用將本地PDF解析為json文件。

1.2,需求

二,文件生成導(dǎo)出

第一步:安裝 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'];//創(chuàng)建一個(gè)和表頭對(duì)應(yīng)且名稱與數(shù)據(jù)庫字段對(duì)應(yīng)數(shù)據(jù),便于循環(huán)取出數(shù)據(jù)
      var pObj = docx.createP({ align: 'center' });// 創(chuàng)建行 設(shè)置居中 大標(biāo)題
      pObj.addText('全國(guó)所有城市', { bold: true, font_face: 'Arial', font_size: 18 });// 添加文字 設(shè)置字體樣式 加粗 大小

      // let towsLen = tows.length
      let dataLen = data.length
      for (var i = 0; i < dataLen; i++) {//循環(huán)數(shù)據(jù)庫得到的數(shù)據(jù),因?yàn)槿〕龅臄?shù)據(jù)格式為
        //[{"id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"},{…………},{…………}]
        /************************* 文本 *******************************/
        // var pObj = docx.createP();//創(chuàng)建一行
        // pObj.addText(`(${i+1}), `,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`省級(jí):`,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`${data[i]['provinceZh']} `,);
        // pObj.addText(`市級(jí):`,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`${data[i]['leaderZh']} `);
        // pObj.addText(`縣區(qū):`,{ 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);// 服務(wù)端生成word
      res.writeHead(200, {
        // 注意這里的type設(shè)置,導(dǎo)出不同文件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);// 客戶端導(dǎo)出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: "區(qū)/縣",
      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) {//根據(jù)需求查詢想要的字段
    if (err) {
      //執(zhí)行出錯(cuò)
    } else {
      //var tows = ['id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn'];//創(chuàng)建一個(gè)和表頭對(duì)應(yīng)且名稱與數(shù)據(jù)庫字段對(duì)應(yīng)數(shù)據(jù),便于循環(huán)取出數(shù)據(jù)
      var pObj = docx.createP({ align: 'center' });// 創(chuàng)建行 設(shè)置居中 大標(biāo)題
      pObj.addText('全國(guó)所有城市', { bold: true, font_face: 'Arial', font_size: 18 });// 添加文字 設(shè)置字體樣式 加粗 大小

      // let towsLen = tows.length
      let dataLen = data.length
      for (var i = 0; i < dataLen; i++) {//循環(huán)數(shù)據(jù)庫得到的數(shù)據(jù),因?yàn)槿〕龅臄?shù)據(jù)格式為
        //[{"id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"},{…………},{…………}]
        /************************* 文本 *******************************/
        // var pObj = docx.createP();//創(chuàng)建一行
        // pObj.addText(`(${i+1}), `,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`省級(jí):`,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`${data[i]['provinceZh']} `,);
        // pObj.addText(`市級(jí):`,{ bold: true, font_face: 'Arial',});
        // pObj.addText(`${data[i]['leaderZh']} `);
        // pObj.addText(`縣區(qū):`,{ 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);// 服務(wù)端生成word
      res.writeHead(200, {
        // 注意這里的type設(shè)置,導(dǎo)出不同文件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);// 客戶端導(dǎo)出word
    }
  });

});

第五步:前端調(diào)用

下載調(diào)用方法

downloadWordOper() {
    // var url = "http://localhost:8880/api/v1/yingqi/download/word";
    // window.location = url;//這里不能使用get方法跳轉(zhuǎn),否則下載不成功
      this.$http(downloadWord()).then((res)=>{
       //這里res.data是返回的blob對(duì)象
       var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //application/vnd.openxmlformats-officedocument.wordprocessingml.document這里表示doc類型
       downloadFile(blob,'word','docx')
      })
   
  },

downloadFile方法代碼如下:

/**
  *下載文件
  * @param blob :返回?cái)?shù)據(jù)的blob對(duì)象
  * @param tagFileName :下載后文件名標(biāo)記
  * @param fileType :文件類 word(docx) excel(xlsx) ppt等
  */
 export function downloadFile(blob,tagFileName,fileType) {
  var downloadElement = document.createElement('a');
  var href = window.URL.createObjectURL(blob); //創(chuàng)建下載的鏈接
  downloadElement.href = href;
  downloadElement.download = tagFileName+moment(new Date().getTime()).format('YYYYMMDDhhmmss')+'.'+fileType; //下載后文件名
  document.body.appendChild(downloadElement);
  downloadElement.click(); //點(diǎn)擊下載
  document.body.removeChild(downloadElement); //下載完成移除元素
  window.URL.revokeObjectURL(href); //釋放掉blob對(duì)象
 }

第六步:下載后的效果

ppt生成下載類似,只是設(shè)置的writeHead類型與使用的方法不一樣

router.put('/download/createPpt', function (req, res) {
  console.log('exportPpt-------------');
  pptx.on('finalize', function (written) {
    console.log('Finish to create ppt file.\nTotal bytes created: ' + written + '\n');
  });


  pptx.on('error', function (err) {
    console.log(err);
  });

  let slide1 = pptx.makeNewSlide();//創(chuàng)建一個(gè)新幻燈片
  slide1.title = 'PPT文件';
  slide1.addText('Office generator', {
    y: 66, x: 'c', cx: '50%', cy: 60, font_size: 48,
    color: '0000ff'
  });

  slide1.addText('Big Red', {
    y: 250, x: 10, cx: '70%',
    font_face: 'Wide Latin', font_size: 54,
    color: 'cc0000', bold: true, underline: true
  });

  var out = fs.createWriteStream('out.pptx');// 文件寫入
  out.on('error', function (err) {
    console.log('error2===',err);
  });
  var result = pptx.generate(out);// 服務(wù)端生成ppt
  res.writeHead(200, {
    // 注意這里的type設(shè)置,導(dǎo)出不同文件type值不同application/vnd.openxmlformats-officedocument.presentationml.presentation
    // "Content-Type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
    // 'Content-disposition': 'attachment; filename=out' + moment(new Date().getTime()).format('YYYYMMDDhhmmss') + '.pptx'
    "Content-Type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
    'Content-disposition': 'attachment; filename=surprise.pptx'
  });
  pptx.generate(res);// 客戶端導(dǎo)出ppt

});

三,文件上傳解析

3.1,word文檔解析

第一步:安裝textract

cnpm install textract --save

第二步:引入textract

//引入textract解析word模塊
var textract = require('textract');//對(duì)于docx文件,您可以使用textract,它將從.docx文件中提取文本。
var fs = require('fs');

第三步:解析文檔

function parseWord(excelConfig, res) {
  textract.fromFileWithPath(excelConfig.excel_Dir, function (error, text) {
    if (error) {
      res.status(200).json({
        httpCode: 200,
        message: '導(dǎo)入解析失敗',
        data: error,
        returnValue: 0
      });
    } else {
      res.status(200).json({
        httpCode: 200,
        message: '導(dǎo)入成功',
        data: {
          result: text
        },
        returnValue: 1
      });
    }
  })
}

第四步:解析后刪除文檔

fs.unlink(excelConfig.excel_Dir, function (err) {
      if (err) throw err;
      console.log("刪除文件" + excelConfig.excel_Dir + "成功")
    })

第五步:拋出接口調(diào)用后的效果

3.2,pdf文檔解析

第一步:安裝pdf2json

cnpm install pdf2json --save

第二步:引入pdf2json

var PDFParser = require("pdf2json");
var fs = require('fs');

第三步:解析文檔

function parsePdf(excelConfig, res) {
  var pdfParser = new PDFParser(this, 1);
  pdfParser.loadPDF(excelConfig.excel_Dir);
  pdfParser.on("pdfParser_dataError", errData => {
    res.status(200).json({
      httpCode: 200,
      message: '導(dǎo)入解析失敗',
      data: errData,
      returnValue: 0
    });
  });
  pdfParser.on("pdfParser_dataReady", pdfData => {
    let data = pdfParser.getRawTextContent()
    fs.writeFile('./uploads/test.txt', data, function (err) {
      if (err) {
        throw err;
      }
    });
    res.status(200).json({
      httpCode: 200,
      message: '導(dǎo)入成功',
      data: {
        result: data
      },
      returnValue: 1
    });
  });
}

第四步:解析后刪除文檔

 fs.unlink(excelConfig.excel_Dir, function (err) {
if (err) throw err;
console.log("刪除文件" + excelConfig.excel_Dir + "成功")
})

第五步:拋出接口調(diào)用后的效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你搞懂Node中的流

    一文帶你搞懂Node中的流

    流,通俗來講就是數(shù)據(jù)流動(dòng),數(shù)據(jù)從一個(gè)地方緩慢的流到另一個(gè)地方。本文將通過示例為大家詳細(xì)講講Node中的流,感興趣的可以了解一下
    2022-08-08
  • node中的crypto模塊操作方法

    node中的crypto模塊操作方法

    加密操作可能很棘手,以至于付費(fèi)的加密服務(wù)公司的存在只是為了確保在代碼庫中正確實(shí)現(xiàn)加密操作,本文給大家介紹node中的crypto模塊操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Node.js Event Loop各階段講解

    Node.js Event Loop各階段講解

    今天小編就為大家分享一篇關(guān)于Node.js Event Loop各階段講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Nodejs開發(fā)grpc的實(shí)例代碼

    Nodejs開發(fā)grpc的實(shí)例代碼

    Nodejs開發(fā)grpc包含靜態(tài)和動(dòng)態(tài)兩種代碼生成方式,靜態(tài)代碼生成需要提前通過.proto文件編譯生成JS源碼,而動(dòng)態(tài)代碼生成則是在運(yùn)行時(shí)指定IDL文件位置,實(shí)時(shí)生成源碼,兩者各有優(yōu)缺點(diǎn),本文給大家介紹Nodejs開發(fā)grpc的實(shí)例代碼,感興趣的朋友一起看看吧
    2024-10-10
  • puppeteer庫入門初探

    puppeteer庫入門初探

    這篇文章主要介紹了puppeteer庫入門初探,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • npm install常見錯(cuò)誤類型及對(duì)應(yīng)的解決方案

    npm install常見錯(cuò)誤類型及對(duì)應(yīng)的解決方案

    在前端開發(fā)中,npm是最常用的包管理工具,通過 npm install 命令,開發(fā)者可以輕松地安裝項(xiàng)目所需的依賴包,然而,在實(shí)際使用過程中,npm install 可能會(huì)因?yàn)楦鞣N原因而報(bào)錯(cuò),本文將詳細(xì)介紹一些常見的 npm install 錯(cuò)誤類型、發(fā)生原因及其對(duì)應(yīng)的解決方案,需要的朋友可以參考下
    2025-03-03
  • window10下node使用管理神器NVM安裝配置超詳細(xì)步驟

    window10下node使用管理神器NVM安裝配置超詳細(xì)步驟

    nvm全稱Node Version Manager是 Nodejs 版本管理器,它讓我們能方便的對(duì) Nodejs 的版本進(jìn)行切換,nvm 的官方版本只支持 Linux 和 Mac, Windows 用戶,可以用 nvm-windows,這篇文章主要介紹了window10下node使用管理神器NVM安裝配置超詳細(xì)步驟,需要的朋友可以參考下
    2023-01-01
  • 如何在命令行判斷node.js啟動(dòng)了沒有(最新)

    如何在命令行判斷node.js啟動(dòng)了沒有(最新)

    這篇文章主要介紹了如何在命令行判斷node.js啟動(dòng)了沒有,使用 tasklist 命令列出所有正在運(yùn)行的進(jìn)程,并使用 findstr 命令過濾出 Node.js 進(jìn)程,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 使用upstart把nodejs應(yīng)用封裝為系統(tǒng)服務(wù)實(shí)例

    使用upstart把nodejs應(yīng)用封裝為系統(tǒng)服務(wù)實(shí)例

    這篇文章主要介紹了使用upstart把nodejs應(yīng)用封裝為系統(tǒng)服務(wù)實(shí)例,需要的朋友可以參考下
    2014-06-06
  • nodejs提示:cross-device link not permitted, rename錯(cuò)誤的解決方法

    nodejs提示:cross-device link not permitted, rename錯(cuò)誤的解決方法

    這篇文章主要給大家介紹了關(guān)于nodejs提示:cross-device link not permitted, rename錯(cuò)誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nodejs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

顺昌县| 富源县| 曲周县| 奉贤区| 怀来县| 盐山县| 高青县| 大冶市| 镇巴县| 青浦区| 舟山市| 库车县| 呼伦贝尔市| 略阳县| 永昌县| 庆安县| 芦溪县| 锦州市| 沧州市| 屏东县| 达拉特旗| 汉寿县| 阳谷县| 略阳县| 全州县| 建德市| 卢龙县| 鲜城| 裕民县| 长武县| 蒲城县| 桐柏县| 浦城县| 泸西县| 玉林市| 资溪县| 蓬溪县| 高安市| 汕头市| 侯马市| 新密市|