提交
This commit is contained in:
@@ -137,8 +137,7 @@ export default {
|
||||
console.error("解析粘贴内容失败:", error);
|
||||
callback([]);
|
||||
}
|
||||
}
|
||||
,
|
||||
},
|
||||
|
||||
async extractWordTablesToArrays(file, callback) {
|
||||
const Zip = new JSZip();
|
||||
@@ -419,13 +418,7 @@ export default {
|
||||
const levelIndex = parseInt(level, 10) - 1;
|
||||
return currentLevelNumbers[levelIndex] || 1;
|
||||
});
|
||||
}
|
||||
|
||||
,
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
async extractTablesFromWord(arrayBuffer, callback) {
|
||||
@@ -450,8 +443,25 @@ export default {
|
||||
const numberingMap = this.parseNumbering(numberingDoc);
|
||||
console.log('numberingMap at line 232:', numberingMap)
|
||||
// 提取表格
|
||||
const tables = xmlDoc.getElementsByTagName("w:tbl");
|
||||
console.log('tables at line 17:', tables)
|
||||
// 获取所有的段落
|
||||
const paragraphs = xmlDoc.getElementsByTagName("w:p");
|
||||
// 获取所有的表格
|
||||
const tables = xmlDoc.getElementsByTagName("w:tbl");
|
||||
|
||||
// 找到表格前的段落
|
||||
let previousParagraphs = [];
|
||||
let tableIndex = 0;
|
||||
|
||||
// 遍历段落,找到第一个表格之前的段落
|
||||
for (let i = 0; i < paragraphs.length; i++) {
|
||||
if (tableIndex < tables.length && paragraphs[i].nextSibling === tables[tableIndex]) {
|
||||
break; // 找到表格
|
||||
}
|
||||
previousParagraphs.push(paragraphs[i]);
|
||||
}
|
||||
// 将前一段的内容转化为 HTML 或文本
|
||||
const previousHtml = this.convertParagraphsToHtml(previousParagraphs);
|
||||
console.log('tables at line 17:', previousHtml)
|
||||
const tableHtml = this.convertTablesToHtml(tables, numberingMap);
|
||||
console.log('tableHtml at line 18:', tableHtml)
|
||||
|
||||
@@ -467,7 +477,45 @@ export default {
|
||||
callback("<p>文件解析失败,请检查文件格式。</p>");
|
||||
}
|
||||
},
|
||||
// 转换段落为 HTML
|
||||
convertParagraphsToHtml(paragraphs) {
|
||||
let html = "";
|
||||
paragraphs.forEach(p => {
|
||||
let paragraphHtml = "";
|
||||
|
||||
// 处理段落中的所有子元素
|
||||
const runs = p.getElementsByTagName("w:r"); // 获取段落中的所有文本运行(可能包含上标、下标等)
|
||||
|
||||
Array.from(runs).forEach(run => {
|
||||
let text = "";
|
||||
|
||||
// 获取文本内容
|
||||
const textNodes = run.getElementsByTagName("w:t");
|
||||
Array.from(textNodes).forEach(t => {
|
||||
text += t.textContent || t.text;
|
||||
});
|
||||
|
||||
// 检查是否为上标或下标
|
||||
const isSuperscript = run.getElementsByTagName("w:vertAlign")[0]?run.getElementsByTagName("w:vertAlign")[0].getAttribute("w:val") === "superscript":"";
|
||||
const isSubscript = run.getElementsByTagName("w:vertAlign")[0]?run.getElementsByTagName("w:vertAlign")[0].getAttribute("w:val") === "subscript":'';
|
||||
|
||||
if (isSuperscript) {
|
||||
text = `<sup>${text}</sup>`;
|
||||
} else if (isSubscript) {
|
||||
text = `<sub>${text}</sub>`;
|
||||
}
|
||||
|
||||
// 拼接到段落 HTML 中
|
||||
paragraphHtml += text;
|
||||
});
|
||||
|
||||
// 将运行的文本拼接成完整的段落
|
||||
html += `<p>${paragraphHtml}</p>`;
|
||||
});
|
||||
|
||||
return html;
|
||||
}
|
||||
,
|
||||
convertTablesToHtml(tables, numberingMap) {
|
||||
const namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
|
||||
let html = "";
|
||||
@@ -544,8 +592,7 @@ export default {
|
||||
}
|
||||
|
||||
return html;
|
||||
}
|
||||
,
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user