office-viewer 0.3.15 → 0.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/esm/Word.d.ts +12 -0
- package/esm/Word.js +38 -0
- package/esm/openxml/word/Note.d.ts +1 -0
- package/esm/openxml/word/Note.js +3 -0
- package/esm/openxml/word/Paragraph.d.ts +2 -0
- package/esm/openxml/word/Paragraph.js +28 -5
- package/esm/openxml/word/Run.d.ts +6 -1
- package/esm/openxml/word/Run.js +14 -1
- package/esm/word/render/renderBody.js +140 -6
- package/esm/word/render/renderInstrText.js +4 -0
- package/esm/word/render/renderNotes.js +19 -0
- package/esm/word/render/renderParagraph.js +23 -5
- package/esm/word/render/renderRun.js +17 -1
- package/esm/word/render/renderTOC.d.ts +5 -0
- package/esm/word/render/renderTOC.js +34 -0
- package/lib/Word.d.ts +12 -0
- package/lib/Word.js +38 -0
- package/lib/createOfficeViewer.d.ts +1 -1
- package/lib/excel/formula/builtinFunctions.d.ts +1 -1
- package/lib/excel/lang/lang.d.ts +1 -1
- package/lib/excel/render/dnd/mousedownColHeader.d.ts +1 -1
- package/lib/excel/render/dnd/mousedownRowHeader.d.ts +1 -1
- package/lib/openxml/word/Note.d.ts +1 -0
- package/lib/openxml/word/Note.js +3 -0
- package/lib/openxml/word/Paragraph.d.ts +2 -0
- package/lib/openxml/word/Paragraph.js +28 -5
- package/lib/openxml/word/Run.d.ts +6 -1
- package/lib/openxml/word/Run.js +14 -0
- package/lib/package/XMLPackageParser.d.ts +1 -1
- package/lib/package/ZipPackageParser.d.ts +1 -1
- package/lib/word/parse/jcToTextAlign.d.ts +1 -1
- package/lib/word/render/renderBody.js +140 -6
- package/lib/word/render/renderInstrText.js +4 -0
- package/lib/word/render/renderNotes.js +19 -0
- package/lib/word/render/renderParagraph.js +23 -5
- package/lib/word/render/renderRun.js +16 -0
- package/lib/word/render/renderTOC.d.ts +5 -0
- package/lib/word/render/renderTOC.js +38 -0
- package/package.json +6 -1
|
@@ -15,6 +15,7 @@ var setElementStyle = require('./setElementStyle.js');
|
|
|
15
15
|
var renderTab = require('./renderTab.js');
|
|
16
16
|
var OMath = require('../../openxml/math/OMath.js');
|
|
17
17
|
var renderMath = require('./renderMath.js');
|
|
18
|
+
var renderTOC = require('./renderTOC.js');
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* 渲染段落
|
|
@@ -25,17 +26,27 @@ function renderParagraph(word, paragraph, renderEmptySpace, inHeader) {
|
|
|
25
26
|
if (renderEmptySpace === void 0) { renderEmptySpace = true; }
|
|
26
27
|
if (inHeader === void 0) { inHeader = false; }
|
|
27
28
|
word.currentParagraph = paragraph;
|
|
29
|
+
// 如果是 TOC 字段段落且文档中有标题,动态生成目录
|
|
30
|
+
if (paragraph.isTOC && word.tocHeadings.length > 0) {
|
|
31
|
+
return renderTOC.renderTOC(word);
|
|
32
|
+
}
|
|
28
33
|
var p = dom.createElement('p');
|
|
29
34
|
word.addClass(p, 'p');
|
|
30
35
|
var properties = paragraph.properties;
|
|
31
36
|
setElementStyle.setElementStyle(word, p, properties);
|
|
32
37
|
// 默认情况下 drawing 是相对段落的
|
|
33
38
|
p.style.position = 'relative';
|
|
39
|
+
// 如果是标题段落,为目录锚点添加 id
|
|
40
|
+
if (paragraph.tocHeadingId) {
|
|
41
|
+
p.id = paragraph.tocHeadingId;
|
|
42
|
+
}
|
|
34
43
|
// 渲染列表前缀
|
|
35
44
|
if (properties.numPr) {
|
|
36
45
|
dom.appendChild(p, renderNumbering.renderNumbering(p, word, properties.numPr));
|
|
37
46
|
}
|
|
38
|
-
|
|
47
|
+
// 复杂字段状态: 'outside' | 'instr' | 'content'
|
|
48
|
+
// begin -> instr, separate -> content, end -> outside
|
|
49
|
+
var fldCharState = 'outside';
|
|
39
50
|
if (properties.tabs && properties.tabs.length) {
|
|
40
51
|
// 目前只支持渲染第一个,因为第二个位置取决于前面内容位置,挺麻烦
|
|
41
52
|
// 虽然目前这个实现很 hack,但可以支持常见情况
|
|
@@ -62,12 +73,19 @@ function renderParagraph(word, paragraph, renderEmptySpace, inHeader) {
|
|
|
62
73
|
var child = _c.value;
|
|
63
74
|
if (child instanceof Run.Run) {
|
|
64
75
|
if (child.fldChar === 'begin') {
|
|
65
|
-
|
|
76
|
+
fldCharState = 'instr';
|
|
77
|
+
}
|
|
78
|
+
else if (child.fldChar === 'separate') {
|
|
79
|
+
fldCharState = 'content';
|
|
80
|
+
}
|
|
81
|
+
else if (child.fldChar === 'end') {
|
|
82
|
+
fldCharState = 'outside';
|
|
66
83
|
}
|
|
67
|
-
|
|
68
|
-
|
|
84
|
+
// 跳过 instrText 所在的 run(字段指令本身不渲染),fldChar 节点本身正常渲染
|
|
85
|
+
if (fldCharState === 'instr' && !child.fldChar) {
|
|
86
|
+
continue;
|
|
69
87
|
}
|
|
70
|
-
dom.appendChild(p, renderRun["default"](word, child, paragraph,
|
|
88
|
+
dom.appendChild(p, renderRun["default"](word, child, paragraph, false, inHeader));
|
|
71
89
|
}
|
|
72
90
|
else if (child instanceof Bookmark.BookmarkStart) {
|
|
73
91
|
dom.appendChild(p, renderBookmark.renderBookmarkStart(word, child));
|
|
@@ -131,6 +131,22 @@ function renderRun(word, run, paragraph, inFldChar, inHeader) {
|
|
|
131
131
|
else if (child instanceof Separator.Separator) {
|
|
132
132
|
dom.appendChild(span, renderSeparator.renderSeparator());
|
|
133
133
|
}
|
|
134
|
+
else if (child instanceof Run.FootnoteRef) {
|
|
135
|
+
var target = child.type + '-' + child.id;
|
|
136
|
+
var displayIndex = word.noteIndexMap[target];
|
|
137
|
+
// 如果脚注内容为空(不在映射中),不渲染引用
|
|
138
|
+
if (displayIndex == null)
|
|
139
|
+
break;
|
|
140
|
+
var anchor = dom.createElement('a');
|
|
141
|
+
anchor.href = '#' + target;
|
|
142
|
+
anchor.style.verticalAlign = 'super';
|
|
143
|
+
anchor.style.fontSize = '0.75em';
|
|
144
|
+
anchor.style.textDecoration = 'none';
|
|
145
|
+
anchor.dataset.noteId = child.id;
|
|
146
|
+
anchor.dataset.noteType = child.type;
|
|
147
|
+
anchor.textContent = '[' + String(displayIndex) + ']';
|
|
148
|
+
dom.appendChild(span, anchor);
|
|
149
|
+
}
|
|
134
150
|
else {
|
|
135
151
|
console.warn('unknown child', child);
|
|
136
152
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var dom = require('../../util/dom.js');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 动态生成目录 HTML(当文档 TOC 字段没有缓存条目时使用)
|
|
10
|
+
*/
|
|
11
|
+
function renderTOC(word) {
|
|
12
|
+
var e_1, _a;
|
|
13
|
+
var nav = dom.createElement('nav');
|
|
14
|
+
nav.className = 'docx-toc';
|
|
15
|
+
try {
|
|
16
|
+
for (var _b = tslib.__values(word.tocHeadings), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
17
|
+
var heading = _c.value;
|
|
18
|
+
var item = dom.createElement('div');
|
|
19
|
+
item.className = "docx-toc-item docx-toc-level-".concat(heading.level);
|
|
20
|
+
item.style.paddingLeft = "".concat((heading.level - 1) * 2, "em");
|
|
21
|
+
var a = dom.createElement('a');
|
|
22
|
+
a.href = '#' + heading.id;
|
|
23
|
+
a.textContent = heading.text;
|
|
24
|
+
dom.appendChild(item, a);
|
|
25
|
+
dom.appendChild(nav, item);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
29
|
+
finally {
|
|
30
|
+
try {
|
|
31
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
32
|
+
}
|
|
33
|
+
finally { if (e_1) throw e_1.error; }
|
|
34
|
+
}
|
|
35
|
+
return nav;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exports.renderTOC = renderTOC;
|
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "office-viewer",
|
|
3
|
-
"
|
|
3
|
+
"repository": {
|
|
4
|
+
"type": "git",
|
|
5
|
+
"url": "https://github.com/baidu/amis-inner.git"
|
|
6
|
+
},
|
|
7
|
+
"version": "0.3.17",
|
|
4
8
|
"description": "office 文档在线预览",
|
|
5
9
|
"main": "lib/index.js",
|
|
6
10
|
"module": "esm/index.js",
|
|
@@ -77,6 +81,7 @@
|
|
|
77
81
|
"amis-formula": "^2.7.2",
|
|
78
82
|
"jest": "^29.0.3",
|
|
79
83
|
"jest-environment-jsdom": "^29.0.3",
|
|
84
|
+
"puppeteer": "^22.8.0",
|
|
80
85
|
"rollup": "^2.60.2",
|
|
81
86
|
"rollup-plugin-terser": "^7.0.2",
|
|
82
87
|
"sass": "^1.69.7",
|