这里介绍最新版office文档内容提取的一些简单方法。对于docx/pptx/xlsx文档来说,其本身就是一些zip文件,只需要在node.js先将其解压,再解析其中存放内容的xml即可,如word中的: text.docx\word\document.xml。
安装解压模块
我们可以直接使用 unzip 模块,来解压。使用前先安装 unzip。
npm install unzip
解压文件函数
然后编写一个解压指定xml文件的函数
var unzip = require('unzip')
var exactZip = function(filePath, fileName, cb) {
var contents = []
fs.createReadStream(filePath)
.pipe(unzip.Parse())
.on('entry', function (entry) {
var file = entry.path;
var type = entry.type;
var size = entry.size;
if (file.indexOf(fileName) === 0) {
entry.on('data', function(chrunk) {
contents.push(chrunk)
})
// entry.on('end', function() {
// })
entry.on('error', function(err) {
console.log(err)
cb && cb(err)
})
} else {
entry.autodrain();
}
})
.on('error', function(err) {
cb && cb(err)
})
.on('close', function() {
var xmlContent = Buffer.concat(contents).toString()
cb && cb(null, xmlContent)
})
return
}
解压文本文件
比如对于docx文件,文本内容存放在document.xml文件中,我们可以直接用exactZip解压:
exactZip(filePath, 'word/document.xml', function(err, xmlContent) {
//处理xmlContent
})
xmlContent内容大致如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"> <w:body> <w:p w:rsidR="000B188E" w:rsidRDefault="004932A3" w:rsidP="00D93264"> <w:pPr> <w:pStyle w:val="a3" /> <w:numPr> <w:ilvl w:val="0" /> <w:numId w:val="6" /></w:numPr> <w:ind w:firstLineChars="0" /></w:pPr> <w:r w:rsidRPr="006B5D2F"> <w:rPr> <w:rFonts w:hint="eastAsia" /></w:rPr> <w:t>从四个选项中选择你认为最适合取代问号的一个。</w:t> </w:r> </w:p> <w:p w:rsidR="006B5D2F" w:rsidRDefault="000B188E" w:rsidP="006B5D2F"> <w:r> <w:rPr> ......
然后用正则或xml解析出所有 <w:t> 中的文本即可。
相关阅读:
Node.JS高效压缩解压zip文件:将child_process执行结果输入stdout流
NodeJS 文件压缩/解压方案-Linux上zip相关命令
node.js使用unzip解压zip包指定文件,提取 word/excel 文本内容
回复 (0)
微信扫码 立即评论