本文介绍: node.js 读目录.txt文件,使用 elementtree 生成思维导图 Freemind(.mm)文件
请参阅: java : pdfbox 读取 PDF文件内书签
请注意:书的目录.txt 编码:UTF-8,推荐用 Notepad++ 转换编码。
npm install elementtree –save
编写 txt_etree_mm.js 如下
// 读目录.txt文件,使用 elementtree 生成思维导图 Freemind(.mm)文件
let fs = require('fs');
let process = require('process');
let path = require('path');
let readline = require('readline');
let et = require('elementtree');
let XML = et.XML;
let ElementTree = et.ElementTree;
// element = et.Element;
let subElement = et.SubElement;
if (process.argv.length <3){
console.error("usage: node txt_etree.mm.js file1.txt");
return 1;
}
let file1 = process.argv[2];
if (! fs.statSync(file1).isFile()) {
console.error("it is not File.");
return 2;
}
let ext = path.extname(file1);
if (ext.toLowerCase() != '.txt'){
console.error(ext +" is not .txt");
return 3;
}
let file2 = file1.replace('.txt', '.mm');
console.log(file2);
let fRead = fs.createReadStream(file1);
let fWrite = fs.createWriteStream(file2);
// 创建readline接口实例
let rline = readline.createInterface({
input: fRead,
// output: fWrite,
terminal: true
});
var txt, map1, root, edge, p_node, node1, node2, node3, node4, node5;
// 创建 map节点
map1 = et.Element('map');
map1.set('version', '1.0.1');
// 用缩排表现层级关系,假设最多5个层级
const indent1 =" ";
const indent2 =" ";
const indent3 =" ";
const indent4 =" ";
// line 事件
let n =1;
rline.on('line', function(line){
txt = line.trim();
if (n ==1){
// 读取第一行:书名
// 创建主题节点
root = subElement(map1, "node");
root.set('ID', '1');
root.set('STYLE', 'bubble'); // 泡框
root.set('TEXT', txt);
// 定义连线的颜色:红色
edge = subElement(root, "edge")
edge.set('COLOR', "#ff0000")
}
txt = txt.slice(0,-3); // 去掉行尾的页数
if (txt.length ==0 || n==1){ ;}
else if (txt.length >0 && line.slice(0,1) !=' '){
// 创建主题的子节点(1级节点)
node1 = subElement(root, "node");
node1.set('ID', String(n));
node1.set('POSITION', "right");
node1.set('TEXT', txt);
p_node = node1; // 寄存父节点
}
else if (line.startsWith(indent1) && line.slice(2,3) !=' '){
// 创建node1的子节点(2级节点)
if (node1) node2 = subElement(node1, "node");
else node2 = subElement(root, "node");
node2.set('ID', String(n));
node2.set('TEXT', txt);
p_node = node2;
}
else if (line.startsWith(indent2) && line.slice(4,5) !=' '){
// 创建node2的子节点(3级节点)
if (node2) node3 = subElement(node2, "node");
else if(node1) node3 = subElement(node1, "node");
else node3 = subElement(root, "node");
node3.set('FOLDED', "true");
node3.set('ID', String(n));
node3.set('TEXT', txt);
p_node = node3;
}
else if (line.startsWith(indent3) && line.slice(6,7) !=' '){
// 创建node3的子节点(4级节点)
if (node3) node4 = subElement(node3, "node");
else if (node2) node4 = subElement(node2, "node");
else if (node1) node4 = subElement(node1, "node");
else node4 = subElement(root, "node");
node4.set('ID', String(n));
node4.set('TEXT', txt);
p_node = node4;
}
else if (line.startsWith(indent4) && line.slice(8,9) !=' '){
// 创建node4的子节点(5级节点)
if (node4) node5 = subElement(node4, "node");
else if (p_node) node5 = subElement(p_node, "node");
else node5 = subElement(root, "node");
node5.set('ID', String(n));
node5.set('TEXT', txt);
}
else {
console.log(txt);
}
n++;
});
var etree, xml;
rline.on('close', function(){
etree = new ElementTree(map1);
xml = etree.write({'xml_declaration': false});
//console.log(xml);
fWrite.write(xml);
console.log("line number: "+n);
});
运行 node txt_etree.mm.js your_pdf_dir.txt
原文地址:https://blog.csdn.net/belldeep/article/details/136048961
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_68335.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。