tijiao
This commit is contained in:
@@ -1115,10 +1115,10 @@ a {
|
|||||||
/* 自动调整列宽 */
|
/* 自动调整列宽 */
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table td,
|
.wordTableHtml table td,
|
||||||
@@ -1131,10 +1131,10 @@ a {
|
|||||||
word-break: normal;
|
word-break: normal;
|
||||||
|
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table tbody tr td {
|
.wordTableHtml table tbody tr td {
|
||||||
@@ -1160,38 +1160,38 @@ a {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table span {
|
.wordTableHtml table span {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
text-align: left !important;
|
text-align: left !important;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size:12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table .color-highlight {
|
.wordTableHtml table .color-highlight {
|
||||||
color: rgb(0, 130, 170) !important;
|
color: rgb(0, 130, 170) !important;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table blue {
|
.wordTableHtml table blue {
|
||||||
color: rgb(0, 130, 170) !important;
|
color: rgb(0, 130, 170) !important;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wordTableHtml table tr:first-child td {
|
.wordTableHtml table tr:first-child td {
|
||||||
@@ -1258,10 +1258,10 @@ a {
|
|||||||
/* 自动调整列宽 */
|
/* 自动调整列宽 */
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.word-container table td,
|
.word-container table td,
|
||||||
@@ -1274,10 +1274,10 @@ a {
|
|||||||
/* 长单词自动换行 */
|
/* 长单词自动换行 */
|
||||||
word-break: normal;
|
word-break: normal;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.word-container table tbody tr td {
|
.word-container table tbody tr td {
|
||||||
@@ -1303,29 +1303,29 @@ a {
|
|||||||
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.word-container table span {
|
.word-container table span {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
text-align: left !important;
|
text-align: left !important;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.word-container table .color-highlight {
|
.word-container table .color-highlight {
|
||||||
color: rgb(0, 130, 170) !important;
|
color: rgb(0, 130, 170) !important;
|
||||||
font-family: 'Charis SIL' !important;
|
font-family: 'Charis SIL' !important;
|
||||||
font-size: 7.5pt !important;
|
font-size: 12px !important;
|
||||||
mso-font-kerning: 1pt !important;
|
mso-font-kerning: 1pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.word-container table tr:first-child td {
|
.word-container table tr:first-child td {
|
||||||
|
|||||||
@@ -161,90 +161,152 @@ export default {
|
|||||||
callback([]);
|
callback([]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async extractWordTablesToArrays(file, callback) {
|
async extractWordTablesToArrays(file, callback) {
|
||||||
const Zip = new JSZip();
|
const namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
|
||||||
try {
|
try {
|
||||||
// 解压 Word 文档
|
const Zip = new JSZip();
|
||||||
const zip = await Zip.loadAsync(file);
|
const zip = await Zip.loadAsync(file);
|
||||||
const documentXml = await zip.file("word/document.xml").async("string");
|
|
||||||
|
|
||||||
// 解析 XML
|
console.log("解压后的文件:", Object.keys(zip.files));
|
||||||
|
|
||||||
|
const documentFile = zip.file("word/document.xml");
|
||||||
|
if (!documentFile) {
|
||||||
|
console.error("❌ 找不到 word/document.xml,无法解析 Word 文件");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const documentXml = await documentFile.async("string");
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
const documentDoc = parser.parseFromString(documentXml, "application/xml");
|
const documentDoc = parser.parseFromString(documentXml, "application/xml");
|
||||||
|
|
||||||
// 获取命名空间
|
console.log("解析的 XML 结构:", new XMLSerializer().serializeToString(documentDoc));
|
||||||
const namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
|
|
||||||
const numberingXml = await zip.file("word/numbering.xml").async("string");
|
const numberingFile = zip.file("word/numbering.xml");
|
||||||
let numberingDoc = null;
|
let numberingMap = {};
|
||||||
if (numberingXml) {
|
if (numberingFile) {
|
||||||
numberingDoc = parser.parseFromString(numberingXml, "application/xml");
|
const numberingXml = await numberingFile.async("string");
|
||||||
|
const numberingDoc = parser.parseFromString(numberingXml, "application/xml");
|
||||||
|
numberingMap = this.parseNumbering(numberingDoc);
|
||||||
|
} else {
|
||||||
|
console.warn("⚠️ word/numbering.xml 不存在,跳过编号解析");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取编号定义
|
|
||||||
const numberingMap = this.parseNumbering(numberingDoc);
|
|
||||||
|
|
||||||
// 获取所有表格
|
|
||||||
const tables = documentDoc.getElementsByTagNameNS(namespace, "tbl");
|
const tables = documentDoc.getElementsByTagNameNS(namespace, "tbl");
|
||||||
const allTables = []; // 存储所有表格的二维数组
|
const allTables = [];
|
||||||
|
|
||||||
if (!tables || tables.length === 0) {
|
if (!tables || tables.length === 0) {
|
||||||
console.warn("未找到表格内容,请检查 XML 结构");
|
console.warn("未找到表格内容,请检查 XML 结构");
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (const table of tables) {
|
for (const table of tables) {
|
||||||
|
|
||||||
const prevParagraph = table.previousElementSibling;
|
|
||||||
if (prevParagraph) {
|
|
||||||
console.log(`表格前的段落: ${prevParagraph.textContent}`);
|
|
||||||
}
|
|
||||||
const rows = table.getElementsByTagNameNS(namespace, "tr");
|
const rows = table.getElementsByTagNameNS(namespace, "tr");
|
||||||
const tableArray = []; // 当前表格的二维数组
|
const tableArray = [];
|
||||||
|
|
||||||
for (const row of rows) {
|
let rowSpanMap = [];
|
||||||
|
|
||||||
|
for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
|
||||||
|
const row = rows[rowIndex];
|
||||||
const cells = row.getElementsByTagNameNS(namespace, "tc");
|
const cells = row.getElementsByTagNameNS(namespace, "tc");
|
||||||
const rowArray = []; // 当前行的数据
|
const rowArray = [];
|
||||||
|
|
||||||
// 存储已合并的单元格
|
if (!rowSpanMap[rowIndex]) {
|
||||||
let colSpanInfo = [];
|
rowSpanMap[rowIndex] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
let cellIndex = 0;
|
||||||
|
|
||||||
for (let i = 0; i < cells.length; i++) {
|
for (let i = 0; i < cells.length; i++) {
|
||||||
|
while (rowSpanMap[rowIndex][cellIndex]) {
|
||||||
|
rowArray.push(null);
|
||||||
|
cellIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
const cell = cells[i];
|
const cell = cells[i];
|
||||||
let cellText = "";
|
let cellText = "";
|
||||||
// const paragraphs = cell.getElementsByTagNameNS(namespace, "p");
|
|
||||||
const paragraphs = cell.getElementsByTagName("w:p");
|
const paragraphs = cell.getElementsByTagName("w:p");
|
||||||
// 检查合并单元格属性
|
|
||||||
const gridSpan = cell.getElementsByTagNameNS(namespace, "gridSpan")[0];
|
const gridSpan = cell.getElementsByTagNameNS(namespace, "gridSpan")[0];
|
||||||
const vMerge = cell.getElementsByTagNameNS(namespace, "vMerge")[0];
|
const vMerge = cell.getElementsByTagNameNS(namespace, "vMerge")[0];
|
||||||
|
|
||||||
// 获取合并信息
|
var colspan = gridSpan ? parseInt(gridSpan.getAttribute("w:val"), 10) : 1;
|
||||||
let colspan = gridSpan ? parseInt(gridSpan.getAttribute("w:val"), 10) : 1;
|
var rowspan = 1;
|
||||||
let rowspan = 1;
|
|
||||||
|
|
||||||
if (vMerge && vMerge.getAttribute("w:val") === "restart") {
|
// if (vMerge) {
|
||||||
rowspan = 2; // 假设合并两行
|
// if (vMerge.getAttribute("w:val") === "restart") {
|
||||||
} else if (vMerge && !vMerge.getAttribute("w:val")) {
|
// rowspan = 4;
|
||||||
continue; // 如果是合并单元格的继续部分,则跳过
|
// } else {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (vMerge) {
|
||||||
|
if (vMerge.getAttribute("w:val") === "restart") {
|
||||||
|
rowspan = 1; // 初始化 rowspan
|
||||||
|
let nextRowIdx = rowIndex + 1;
|
||||||
|
let maxRowspan = rows.length - rowIndex; // 确保 rowspan 不会超过剩余行数
|
||||||
|
|
||||||
|
while (nextRowIdx < rows.length) {
|
||||||
|
const nextRowCells = rows[nextRowIdx].getElementsByTagNameNS(namespace, "tc");
|
||||||
|
console.log(`🔍 检查下一行单元格 at row ${nextRowIdx}, col ${cellIndex}:`, nextRowCells);
|
||||||
|
|
||||||
|
if (nextRowCells.length > cellIndex) {
|
||||||
|
const nextCell = nextRowCells[cellIndex];
|
||||||
|
|
||||||
|
if (!nextCell) {
|
||||||
|
console.warn(`⚠️ nextCell 未定义 at row ${nextRowIdx}, col ${cellIndex}`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nextVMerge = nextCell.getElementsByTagNameNS(namespace, "vMerge")[0];
|
||||||
|
console.log(`🔍 检查 nextVMerge at row ${nextRowIdx}, col ${cellIndex}:`, nextVMerge);
|
||||||
|
|
||||||
|
// **如果 nextVMerge 为空,则不应继续增长 rowspan**
|
||||||
|
if (!nextVMerge) {
|
||||||
|
console.log(`⚠️ nextVMerge 为空 at row ${nextRowIdx}, col ${cellIndex} - 停止扩展`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// **解析 nextVMerge 的值**
|
||||||
|
const vMergeVal = nextVMerge.getAttribute("w:val");
|
||||||
|
|
||||||
|
if (!vMergeVal || vMergeVal === "continue") {
|
||||||
|
if (rowspan < maxRowspan) { // 限制 rowspan 最大值
|
||||||
|
rowspan++;
|
||||||
|
console.log(`✅ rowspan 扩展到: ${rowspan} (row: ${nextRowIdx}, col: ${cellIndex})`);
|
||||||
|
nextRowIdx++;
|
||||||
|
} else {
|
||||||
|
console.log(`⛔ 最大 rowspan 限制 ${rowspan},在 row ${nextRowIdx} 停止`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (vMergeVal === "restart") {
|
||||||
|
console.log(`⛔ 停止 rowspan 扩展 at row ${nextRowIdx}, 因为 w:val="restart"`);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
console.log(`⚠️ 未知 w:val="${vMergeVal}" at row ${nextRowIdx},停止合并`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.warn(`⚠️ Row ${nextRowIdx} 没有足够的列 cellIndex ${cellIndex}`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理单元格内容
|
|
||||||
// let cellText = "";
|
|
||||||
|
|
||||||
|
|
||||||
// 为当前单元格初始化计数器
|
|
||||||
|
|
||||||
|
console.log('rowspan at line 265:', rowspan)
|
||||||
const currentLevelNumbers = {};
|
const currentLevelNumbers = {};
|
||||||
for (const paragraph of paragraphs) {
|
for (const paragraph of paragraphs) {
|
||||||
// 提取段落编号
|
|
||||||
let listPrefix = "";
|
let listPrefix = "";
|
||||||
const numPr = paragraph.getElementsByTagName("w:numPr")[0];
|
const numPr = paragraph.getElementsByTagName("w:numPr")[0];
|
||||||
if (numPr) {
|
if (numPr) {
|
||||||
console.log('numPr at line 54:', numPr)
|
|
||||||
const numIdElement = numPr.getElementsByTagName("w:numId")[0];
|
const numIdElement = numPr.getElementsByTagName("w:numId")[0];
|
||||||
console.log('numIdElement at line 56:', numIdElement)
|
|
||||||
const ilvlElement = numPr.getElementsByTagName("w:ilvl")[0];
|
const ilvlElement = numPr.getElementsByTagName("w:ilvl")[0];
|
||||||
console.log('ilvlElement at line 58:', ilvlElement)
|
|
||||||
if (numIdElement && ilvlElement) {
|
if (numIdElement && ilvlElement) {
|
||||||
const numId = numIdElement.getAttribute("w:val");
|
const numId = numIdElement.getAttribute("w:val");
|
||||||
const ilvl = ilvlElement.getAttribute("w:val");
|
const ilvl = ilvlElement.getAttribute("w:val");
|
||||||
@@ -252,7 +314,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化当前段落文本
|
|
||||||
let paragraphText = listPrefix ? `${listPrefix} ` : "";
|
let paragraphText = listPrefix ? `${listPrefix} ` : "";
|
||||||
|
|
||||||
const runs = paragraph.getElementsByTagName("w:r");
|
const runs = paragraph.getElementsByTagName("w:r");
|
||||||
@@ -263,7 +324,6 @@ export default {
|
|||||||
textContent += text.textContent;
|
textContent += text.textContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查格式
|
|
||||||
const rPr = run.getElementsByTagName("w:rPr")[0];
|
const rPr = run.getElementsByTagName("w:rPr")[0];
|
||||||
let formattedText = textContent;
|
let formattedText = textContent;
|
||||||
|
|
||||||
@@ -288,83 +348,286 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 替换负号
|
|
||||||
formattedText = replaceNegativeSign(formattedText);
|
formattedText = replaceNegativeSign(formattedText);
|
||||||
|
|
||||||
// 首字母大写
|
|
||||||
formattedText = capitalizeFirstLetter(formattedText);
|
formattedText = capitalizeFirstLetter(formattedText);
|
||||||
|
|
||||||
// 添加蓝色标签
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const regex = /\[(\d+(?:–\d+)?(?:, ?\d+(?:–\d+)?)*)\]/g;
|
const regex = /\[(\d+(?:–\d+)?(?:, ?\d+(?:–\d+)?)*)\]/g;
|
||||||
|
formattedText = formattedText.replace(/<blue>/g, '').replace(/<\/blue>/g, '');
|
||||||
formattedText = formattedText.replace(/<blue>/g, '').replace(/<\/blue>/g, ''); // 先去掉所有的 <blue> 标签
|
|
||||||
|
|
||||||
if (regex.test(formattedText)) {
|
if (regex.test(formattedText)) {
|
||||||
formattedText = formattedText.replace(regex, function (match) {
|
formattedText = formattedText.replace(regex, function (match) {
|
||||||
// 提取出方括号中的内容,并进行匹配
|
const content = match.slice(1, match.length - 1);
|
||||||
const content = match.slice(1, match.length - 1); // 去掉方括号
|
|
||||||
|
|
||||||
// 判断是否符合条件,纯数字、逗号后有空格、连字符
|
|
||||||
if (/^\d+$/.test(content) || /, ?/.test(content) || /–/.test(content)) {
|
if (/^\d+$/.test(content) || /, ?/.test(content) || /–/.test(content)) {
|
||||||
return `<blue>${match}</blue>`; // 如果符合条件则加上蓝色标签
|
return `<blue>${match}</blue>`;
|
||||||
}
|
}
|
||||||
return match; // 如果不符合条件,则保持原样
|
return match;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
console.log("After replacement:", formattedText); // 调试:查看替换后的文本
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log("After replacement:", formattedText);
|
||||||
|
|
||||||
paragraphText += formattedText;
|
paragraphText += formattedText;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理换行符
|
|
||||||
const breaks = paragraph.getElementsByTagName("w:br");
|
const breaks = paragraph.getElementsByTagName("w:br");
|
||||||
for (const br of breaks) {
|
for (const br of breaks) {
|
||||||
paragraphText += "<br>";
|
paragraphText += "<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
cellText += paragraphText; // 将段落文本添加到单元格文本
|
cellText += paragraphText;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新合并单元格的信息
|
|
||||||
if (colSpanInfo[i]) {
|
|
||||||
colspan = colSpanInfo[i].colspan;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存当前单元格信息
|
|
||||||
rowArray.push({
|
rowArray.push({
|
||||||
text: cellText,
|
text: cellText,
|
||||||
colspan: colspan,
|
colspan: colspan,
|
||||||
rowspan: rowspan
|
rowspan: rowspan
|
||||||
});
|
});
|
||||||
|
|
||||||
// 记录跨列合并
|
if (rowspan > 1) {
|
||||||
if (colspan > 1) {
|
for (let j = 1; j < rowspan; j++) {
|
||||||
for (let j = 1; j < colspan; j++) {
|
if (!rowSpanMap[rowIndex + j]) {
|
||||||
colSpanInfo[i + j] = { colspan: 0 }; // 用 0 填充后续的列合并
|
rowSpanMap[rowIndex + j] = [];
|
||||||
|
}
|
||||||
|
rowSpanMap[rowIndex + j][cellIndex] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cellIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
tableArray.push(rowArray); // 添加当前行到表格数组
|
tableArray.push(rowArray.filter(item => item !== null));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
allTables.push(tableArray); // 添加当前表格到所有表格数组
|
allTables.push(tableArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("解析后的二维数组:", allTables);
|
console.log("解析后的二维数组:", allTables);
|
||||||
callback(allTables); // 返回处理后的 HTML
|
callback(allTables);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("解析 Word 文件失败:", error);
|
console.error("解析 Word 文件失败:", error);
|
||||||
return [];
|
callback([]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// async extractWordTablesToArrays(file, callback) {
|
||||||
|
|
||||||
|
// const namespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
|
||||||
|
// try {
|
||||||
|
// const Zip = new JSZip();
|
||||||
|
// // 解压 ZIP
|
||||||
|
// const zip = await Zip.loadAsync(file);
|
||||||
|
|
||||||
|
// // **检查解压的文件列表**
|
||||||
|
// console.log("解压后的文件:", Object.keys(zip.files));
|
||||||
|
|
||||||
|
// const documentFile = zip.file("word/document.xml");
|
||||||
|
// if (!documentFile) {
|
||||||
|
// console.error("❌ 找不到 word/document.xml,无法解析 Word 文件");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const documentXml = await documentFile.async("string");
|
||||||
|
// const parser = new DOMParser();
|
||||||
|
// const documentDoc = parser.parseFromString(documentXml, "application/xml");
|
||||||
|
|
||||||
|
// // **打印 XML 结构以检查表格**
|
||||||
|
// console.log("解析的 XML 结构:", new XMLSerializer().serializeToString(documentDoc));
|
||||||
|
|
||||||
|
// // **检查 word/numbering.xml 是否存在**
|
||||||
|
// const numberingFile = zip.file("word/numbering.xml");
|
||||||
|
// let numberingMap = {};
|
||||||
|
// if (numberingFile) {
|
||||||
|
// const numberingXml = await numberingFile.async("string");
|
||||||
|
// const numberingDoc = parser.parseFromString(numberingXml, "application/xml");
|
||||||
|
// numberingMap = parseNumbering(numberingDoc); // 解析编号信息
|
||||||
|
// } else {
|
||||||
|
// console.warn("⚠️ word/numbering.xml 不存在,跳过编号解析");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const tables = documentDoc.getElementsByTagNameNS(namespace, "tbl");
|
||||||
|
// const allTables = []; // 存储所有表格的二维数组
|
||||||
|
|
||||||
|
// if (!tables || tables.length === 0) {
|
||||||
|
// console.warn("未找到表格内容,请检查 XML 结构");
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// for (const table of tables) {
|
||||||
|
|
||||||
|
// const prevParagraph = table.previousElementSibling;
|
||||||
|
// if (prevParagraph) {
|
||||||
|
// console.log(`表格前的段落: ${prevParagraph.textContent}`);
|
||||||
|
// }
|
||||||
|
// const rows = table.getElementsByTagNameNS(namespace, "tr");
|
||||||
|
// const tableArray = []; // 当前表格的二维数组
|
||||||
|
|
||||||
|
// for (const row of rows) {
|
||||||
|
// const cells = row.getElementsByTagNameNS(namespace, "tc");
|
||||||
|
// const rowArray = []; // 当前行的数据
|
||||||
|
|
||||||
|
// // 存储已合并的单元格
|
||||||
|
// let colSpanInfo = [];
|
||||||
|
|
||||||
|
// for (let i = 0; i < cells.length; i++) {
|
||||||
|
// const cell = cells[i];
|
||||||
|
// let cellText = "";
|
||||||
|
// // const paragraphs = cell.getElementsByTagNameNS(namespace, "p");
|
||||||
|
// const paragraphs = cell.getElementsByTagName("w:p");
|
||||||
|
// // 检查合并单元格属性
|
||||||
|
// const gridSpan = cell.getElementsByTagNameNS(namespace, "gridSpan")[0];
|
||||||
|
// const vMerge = cell.getElementsByTagNameNS(namespace, "vMerge")[0];
|
||||||
|
|
||||||
|
// // 获取合并信息
|
||||||
|
// let colspan = gridSpan ? parseInt(gridSpan.getAttribute("w:val"), 10) : 1;
|
||||||
|
// let rowspan = 1;
|
||||||
|
|
||||||
|
// if (vMerge && vMerge.getAttribute("w:val") === "restart") {
|
||||||
|
// rowspan = 4; // 假设合并两行
|
||||||
|
// } else if (vMerge && !vMerge.getAttribute("w:val")) {
|
||||||
|
// continue; // 如果是合并单元格的继续部分,则跳过
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 处理单元格内容
|
||||||
|
// // let cellText = "";
|
||||||
|
|
||||||
|
|
||||||
|
// // 为当前单元格初始化计数器
|
||||||
|
// const currentLevelNumbers = {};
|
||||||
|
// for (const paragraph of paragraphs) {
|
||||||
|
// // 提取段落编号
|
||||||
|
// let listPrefix = "";
|
||||||
|
// const numPr = paragraph.getElementsByTagName("w:numPr")[0];
|
||||||
|
// if (numPr) {
|
||||||
|
// console.log('numPr at line 54:', numPr)
|
||||||
|
// const numIdElement = numPr.getElementsByTagName("w:numId")[0];
|
||||||
|
// console.log('numIdElement at line 56:', numIdElement)
|
||||||
|
// const ilvlElement = numPr.getElementsByTagName("w:ilvl")[0];
|
||||||
|
// console.log('ilvlElement at line 58:', ilvlElement)
|
||||||
|
// if (numIdElement && ilvlElement) {
|
||||||
|
// const numId = numIdElement.getAttribute("w:val");
|
||||||
|
// const ilvl = ilvlElement.getAttribute("w:val");
|
||||||
|
// listPrefix = this.getListNumber(numId, ilvl, numberingMap, currentLevelNumbers);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 初始化当前段落文本
|
||||||
|
// let paragraphText = listPrefix ? `${listPrefix} ` : "";
|
||||||
|
|
||||||
|
// const runs = paragraph.getElementsByTagName("w:r");
|
||||||
|
// for (const run of runs) {
|
||||||
|
// let textContent = "";
|
||||||
|
// const texts = run.getElementsByTagName("w:t");
|
||||||
|
// for (const text of texts) {
|
||||||
|
// textContent += text.textContent;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 检查格式
|
||||||
|
// const rPr = run.getElementsByTagName("w:rPr")[0];
|
||||||
|
// let formattedText = textContent;
|
||||||
|
|
||||||
|
// if (rPr) {
|
||||||
|
// const bold = rPr.getElementsByTagName("w:b").length > 0;
|
||||||
|
// const italic = rPr.getElementsByTagName("w:i").length > 0;
|
||||||
|
// const vertAlignElement = rPr.getElementsByTagName("w:vertAlign")[0];
|
||||||
|
|
||||||
|
// if (bold) {
|
||||||
|
// formattedText = `<b>${formattedText}</b>`;
|
||||||
|
// }
|
||||||
|
// if (italic) {
|
||||||
|
// formattedText = `<i>${formattedText}</i>`;
|
||||||
|
// }
|
||||||
|
// if (vertAlignElement) {
|
||||||
|
// const vertAlign = vertAlignElement.getAttribute("w:val");
|
||||||
|
// if (vertAlign === "superscript") {
|
||||||
|
// formattedText = `<sup>${formattedText}</sup>`;
|
||||||
|
// } else if (vertAlign === "subscript") {
|
||||||
|
// formattedText = `<sub>${formattedText}</sub>`;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 替换负号
|
||||||
|
// formattedText = replaceNegativeSign(formattedText);
|
||||||
|
|
||||||
|
// // 首字母大写
|
||||||
|
// formattedText = capitalizeFirstLetter(formattedText);
|
||||||
|
|
||||||
|
// // 添加蓝色标签
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// const regex = /\[(\d+(?:–\d+)?(?:, ?\d+(?:–\d+)?)*)\]/g;
|
||||||
|
|
||||||
|
// formattedText = formattedText.replace(/<blue>/g, '').replace(/<\/blue>/g, ''); // 先去掉所有的 <blue> 标签
|
||||||
|
|
||||||
|
// if (regex.test(formattedText)) {
|
||||||
|
// formattedText = formattedText.replace(regex, function (match) {
|
||||||
|
// // 提取出方括号中的内容,并进行匹配
|
||||||
|
// const content = match.slice(1, match.length - 1); // 去掉方括号
|
||||||
|
|
||||||
|
// // 判断是否符合条件,纯数字、逗号后有空格、连字符
|
||||||
|
// if (/^\d+$/.test(content) || /, ?/.test(content) || /–/.test(content)) {
|
||||||
|
// return `<blue>${match}</blue>`; // 如果符合条件则加上蓝色标签
|
||||||
|
// }
|
||||||
|
// return match; // 如果不符合条件,则保持原样
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// console.log("After replacement:", formattedText); // 调试:查看替换后的文本
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// paragraphText += formattedText;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 处理换行符
|
||||||
|
// const breaks = paragraph.getElementsByTagName("w:br");
|
||||||
|
// for (const br of breaks) {
|
||||||
|
// paragraphText += "<br>";
|
||||||
|
// }
|
||||||
|
|
||||||
|
// cellText += paragraphText; // 将段落文本添加到单元格文本
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 更新合并单元格的信息
|
||||||
|
// if (colSpanInfo[i]) {
|
||||||
|
// colspan = colSpanInfo[i].colspan;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 保存当前单元格信息
|
||||||
|
// rowArray.push({
|
||||||
|
// text: cellText,
|
||||||
|
// colspan: colspan,
|
||||||
|
// rowspan: rowspan
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // 记录跨列合并
|
||||||
|
// if (colspan > 1) {
|
||||||
|
// for (let j = 1; j < colspan; j++) {
|
||||||
|
// colSpanInfo[i + j] = { colspan: 0 }; // 用 0 填充后续的列合并
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// tableArray.push(rowArray); // 添加当前行到表格数组
|
||||||
|
// }
|
||||||
|
|
||||||
|
// allTables.push(tableArray); // 添加当前表格到所有表格数组
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log("解析后的二维数组:", allTables);
|
||||||
|
// callback(allTables); // 返回处理后的 HTML
|
||||||
|
|
||||||
|
// } catch (error) {
|
||||||
|
// console.error("解析 Word 文件失败:", error);
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// },
|
||||||
transformHtmlString(inputHtml) {
|
transformHtmlString(inputHtml) {
|
||||||
|
|
||||||
// inputHtml = inputHtml.replace(/(<[^>]+) style="[^"]*"/g, '$1'); // 移除style属性
|
// inputHtml = inputHtml.replace(/(<[^>]+) style="[^"]*"/g, '$1'); // 移除style属性
|
||||||
@@ -388,7 +651,7 @@ export default {
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
cleanAndParseWordContent(content) {
|
cleanAndParseWordContent(content) {
|
||||||
// 1️⃣ 解析成 <p> 段落数组
|
// 1️⃣ 解析成 <p> 段落数组
|
||||||
let tempDiv = document.createElement('div');
|
let tempDiv = document.createElement('div');
|
||||||
tempDiv.innerHTML = content; // 解析 HTML 内容
|
tempDiv.innerHTML = content; // 解析 HTML 内容
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
//记得切换
|
//记得切换
|
||||||
|
|
||||||
//正式
|
//正式
|
||||||
const mediaUrl = '/public/';
|
// const mediaUrl = '/public/';
|
||||||
const baseUrl = '/';
|
// const baseUrl = '/';
|
||||||
|
|
||||||
|
|
||||||
// const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
||||||
// const baseUrl = '/api';
|
const baseUrl = '/api';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table td, table th {
|
table td, table th {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -55,8 +55,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tbody tr td{
|
table tbody tr td{
|
||||||
|
|
||||||
@@ -82,8 +82,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table span{
|
table span{
|
||||||
|
|
||||||
@@ -91,16 +91,16 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table .color-highlight{
|
table .color-highlight{
|
||||||
color:rgb(0,130,170) !important;
|
color:rgb(0,130,170) !important;
|
||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tr:first-child td {
|
table tr:first-child td {
|
||||||
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table td, table th {
|
table td, table th {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -55,8 +55,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tbody tr td{
|
table tbody tr td{
|
||||||
|
|
||||||
@@ -84,8 +84,8 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table span{
|
table span{
|
||||||
|
|
||||||
@@ -93,16 +93,16 @@ const tableStyle = ` b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table .color-highlight{
|
table .color-highlight{
|
||||||
color:rgb(0,130,170) !important;
|
color:rgb(0,130,170) !important;
|
||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tr:first-child td {
|
table tr:first-child td {
|
||||||
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table td, table th {
|
table td, table th {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -106,8 +106,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tbody tr td{
|
table tbody tr td{
|
||||||
|
|
||||||
@@ -136,8 +136,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table span{
|
table span{
|
||||||
|
|
||||||
@@ -145,16 +145,16 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table .color-highlight{
|
table .color-highlight{
|
||||||
color:rgb(0,130,170) !important;
|
color:rgb(0,130,170) !important;
|
||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tr:first-child td {
|
table tr:first-child td {
|
||||||
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
||||||
|
|||||||
@@ -375,8 +375,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table td, table th {
|
table td, table th {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -387,8 +387,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tbody tr td{
|
table tbody tr td{
|
||||||
|
|
||||||
@@ -415,8 +415,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table span{
|
table span{
|
||||||
|
|
||||||
@@ -424,16 +424,16 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table .color-highlight{
|
table .color-highlight{
|
||||||
color:rgb(0,130,170) !important;
|
color:rgb(0,130,170) !important;
|
||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tr:first-child td {
|
table tr:first-child td {
|
||||||
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
||||||
|
|||||||
@@ -517,8 +517,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table td, table th {
|
table td, table th {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -529,8 +529,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tbody tr td{
|
table tbody tr td{
|
||||||
|
|
||||||
@@ -557,8 +557,8 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table span{
|
table span{
|
||||||
|
|
||||||
@@ -566,16 +566,16 @@ b span{
|
|||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table .color-highlight{
|
table .color-highlight{
|
||||||
color:rgb(0,130,170) !important;
|
color:rgb(0,130,170) !important;
|
||||||
font-family:'Charis SIL' !important;
|
font-family:'Charis SIL' !important;
|
||||||
font-size: 7.5000pt !important;
|
font-size: 7.5000pt !important;
|
||||||
mso-font-kerning: 1.0000pt !important;
|
mso-font-kerning: 1.0000pt !important;
|
||||||
line-height: 10pt !important;
|
line-height: 20px !important;
|
||||||
mos-line-height: 10pt !important;
|
mos-line-height: 20px !important;
|
||||||
}
|
}
|
||||||
table tr:first-child td {
|
table tr:first-child td {
|
||||||
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
border-top:1.0000pt solid #000 !important;mso-border-top-alt:0.5000pt solid #000 !important;border-bottom:1.0000pt solid #000 !important;mso-border-bottom-alt:0.5000pt solid #000 !important;
|
||||||
|
|||||||
Reference in New Issue
Block a user