office-viewer 0.1.3 → 0.1.4
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/README.md +1 -1
- package/esm/Word.js +16 -10
- package/esm/openxml/drawing/Drawing.d.ts +2 -0
- package/esm/openxml/drawing/Drawing.js +4 -0
- package/esm/openxml/drawing/Transform.d.ts +2 -0
- package/esm/openxml/drawing/Transform.js +41 -12
- package/esm/openxml/word/Tab.d.ts +1 -1
- package/esm/openxml/word/wps/WPG.d.ts +10 -1
- package/esm/openxml/word/wps/WPG.js +56 -0
- package/esm/openxml/word/wps/WPS.js +1 -0
- package/esm/render/renderDrawing.js +183 -71
- package/esm/render/renderParagraph.js +49 -6
- package/esm/render/renderRun.js +7 -2
- package/esm/render/renderStyle.js +1 -1
- package/esm/render/renderTab.d.ts +1 -1
- package/esm/render/renderTab.js +7 -1
- package/esm/util/get.d.ts +4 -0
- package/esm/util/get.js +18 -0
- package/esm/util/replaceVar.js +2 -1
- package/lib/Word.js +16 -10
- package/lib/openxml/drawing/Drawing.d.ts +2 -0
- package/lib/openxml/drawing/Drawing.js +4 -0
- package/lib/openxml/drawing/Transform.d.ts +2 -0
- package/lib/openxml/drawing/Transform.js +41 -12
- package/lib/openxml/word/Tab.d.ts +1 -1
- package/lib/openxml/word/wps/WPG.d.ts +10 -1
- package/lib/openxml/word/wps/WPG.js +60 -0
- package/lib/openxml/word/wps/WPS.js +1 -0
- package/lib/render/renderDrawing.js +183 -71
- package/lib/render/renderParagraph.js +49 -6
- package/lib/render/renderRun.js +7 -2
- package/lib/render/renderStyle.js +1 -1
- package/lib/render/renderTab.d.ts +1 -1
- package/lib/render/renderTab.js +7 -1
- package/lib/util/get.d.ts +4 -0
- package/lib/util/get.js +22 -0
- package/lib/util/replaceVar.js +2 -1
- package/package.json +2 -3
package/esm/render/renderRun.js
CHANGED
|
@@ -35,12 +35,14 @@ function renderText(span, word, text, paragraph) {
|
|
|
35
35
|
var _a;
|
|
36
36
|
// 简单过滤一下提升性能
|
|
37
37
|
if (text.indexOf('{{') === -1) {
|
|
38
|
+
var finalText = void 0;
|
|
38
39
|
if ((_a = paragraph === null || paragraph === void 0 ? void 0 : paragraph.properties) === null || _a === void 0 ? void 0 : _a.autoSpace) {
|
|
39
|
-
|
|
40
|
+
finalText = cjkspace(text.split(''));
|
|
40
41
|
}
|
|
41
42
|
else {
|
|
42
|
-
|
|
43
|
+
finalText = text;
|
|
43
44
|
}
|
|
45
|
+
span.textContent = finalText;
|
|
44
46
|
}
|
|
45
47
|
else {
|
|
46
48
|
span.dataset.originText = text;
|
|
@@ -48,6 +50,9 @@ function renderText(span, word, text, paragraph) {
|
|
|
48
50
|
span.classList.add(VARIABLE_CLASS_NAME);
|
|
49
51
|
span.textContent = word.replaceText(text);
|
|
50
52
|
}
|
|
53
|
+
// 大于两个空格才转成 nbsp
|
|
54
|
+
var html = span.innerHTML.split(' ').join(' ');
|
|
55
|
+
span.innerHTML = html;
|
|
51
56
|
}
|
|
52
57
|
/**
|
|
53
58
|
* 更新文档里的所有变量
|
|
@@ -21,7 +21,7 @@ function generateDefaultStyle(word) {
|
|
|
21
21
|
}
|
|
22
22
|
var hyphens = ((_a = word.settings) === null || _a === void 0 ? void 0 : _a.autoHyphenation) ? 'hyphens: auto;' : '';
|
|
23
23
|
var classPrefix = word.getClassPrefix();
|
|
24
|
-
return "\n\n\n /** docDefaults **/\n .".concat(classPrefix, " {\n --docx-theme-font-minorHAnsi: Calibri, Helvetica, Arial, 'Helvetica Neue';\n --docx-theme-font-minorEastAsia: 'PingFang SC', 'Microsoft YaHei', 'Hiragino Sans GB', 'STHeiti',\n 'Microsoft YaHei';\n }\n\n .").concat(classPrefix, " p {\n margin: 0;\n padding: 0;\n line-height: 1.5;\n ").concat(hyphens, "\n }\n\n .").concat(classPrefix, " .justify:after {\n content: \"\";\n display: inline-block;\n width: 100%;\n }\n\n .").concat(classPrefix, " table {\n border-spacing: 0;\n }\n\n .").concat(classPrefix, " .").concat(classPrefix, "-p {\n ").concat(defaultPStyle, "\n }\n\n .").concat(classPrefix, " .").concat(classPrefix, "-r {\n
|
|
24
|
+
return "\n\n\n /** docDefaults **/\n .".concat(classPrefix, " {\n --docx-theme-font-minorHAnsi: Calibri, Helvetica, Arial, 'Helvetica Neue';\n --docx-theme-font-minorEastAsia: 'PingFang SC', 'Microsoft YaHei', 'Hiragino Sans GB', 'STHeiti',\n 'Microsoft YaHei';\n }\n\n .").concat(classPrefix, " p {\n margin: 0;\n padding: 0;\n line-height: 1.5;\n ").concat(hyphens, "\n }\n\n .").concat(classPrefix, " .justify:after {\n content: \"\";\n display: inline-block;\n width: 100%;\n }\n\n .").concat(classPrefix, " table {\n border-spacing: 0;\n }\n\n .").concat(classPrefix, " .").concat(classPrefix, "-p {\n ").concat(defaultPStyle, "\n }\n\n .").concat(classPrefix, " .").concat(classPrefix, "-r {\n overflow-wrap: break-word;\n ").concat(defaultRStyle, "\n }\n ");
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* 生成表格级别样式
|
|
@@ -5,4 +5,4 @@ import Word from '../Word';
|
|
|
5
5
|
* 不支持 tabs 里的自定义宽度,因为要算渲染后的宽度,比较麻烦
|
|
6
6
|
* http://officeopenxml.com/WPtab.php
|
|
7
7
|
*/
|
|
8
|
-
export declare function renderTab(word: Word, tab: Tab): HTMLElement;
|
|
8
|
+
export declare function renderTab(word: Word, tab: Tab, renderWidth?: boolean): HTMLElement;
|
package/esm/render/renderTab.js
CHANGED
|
@@ -5,12 +5,18 @@ import { createElement } from '../util/dom.js';
|
|
|
5
5
|
* 不支持 tabs 里的自定义宽度,因为要算渲染后的宽度,比较麻烦
|
|
6
6
|
* http://officeopenxml.com/WPtab.php
|
|
7
7
|
*/
|
|
8
|
-
function renderTab(word, tab) {
|
|
8
|
+
function renderTab(word, tab, renderWidth) {
|
|
9
|
+
if (renderWidth === void 0) { renderWidth = false; }
|
|
9
10
|
var tabElement = createElement('span');
|
|
11
|
+
tabElement.style.display = 'inline-block';
|
|
12
|
+
tabElement.style.width = '2em';
|
|
10
13
|
tabElement.innerHTML = ' ';
|
|
11
14
|
if (tab.leader === 'dot') {
|
|
12
15
|
tabElement.style.borderBottom = '1pt dotted';
|
|
13
16
|
}
|
|
17
|
+
if (renderWidth && tab.pos && (tab.type === 'start' || tab.type == 'left')) {
|
|
18
|
+
tabElement.style.width = tab.pos;
|
|
19
|
+
}
|
|
14
20
|
return tabElement;
|
|
15
21
|
}
|
|
16
22
|
|
package/esm/util/get.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
|
|
3
|
+
*/
|
|
4
|
+
var get = function (obj, path, defaultValue) {
|
|
5
|
+
if (defaultValue === void 0) { defaultValue = undefined; }
|
|
6
|
+
var travel = function (regexp) {
|
|
7
|
+
return String.prototype.split
|
|
8
|
+
.call(path, regexp)
|
|
9
|
+
.filter(Boolean)
|
|
10
|
+
.reduce(function (res, key) {
|
|
11
|
+
return res !== null && res !== undefined ? res[key] : res;
|
|
12
|
+
}, obj);
|
|
13
|
+
};
|
|
14
|
+
var result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/);
|
|
15
|
+
return result === undefined || result === obj ? defaultValue : result;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { get };
|
package/esm/util/replaceVar.js
CHANGED
|
@@ -24,6 +24,7 @@ function replaceText(word, text, data) {
|
|
|
24
24
|
return String(result);
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
+
console.warn('var error: [', text, '] not found in data');
|
|
27
28
|
return '';
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -125,7 +126,7 @@ function replaceTableRow(word, tr) {
|
|
|
125
126
|
}
|
|
126
127
|
finally { if (e_5) throw e_5.error; }
|
|
127
128
|
}
|
|
128
|
-
table.
|
|
129
|
+
table.insertBefore(newTr, tr);
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
132
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
package/lib/Word.js
CHANGED
|
@@ -26,6 +26,7 @@ var parseEndnotes = require('./parse/parseEndnotes.js');
|
|
|
26
26
|
var renderNotes = require('./render/renderNotes.js');
|
|
27
27
|
var print = require('./util/print.js');
|
|
28
28
|
var Settings = require('./openxml/Settings.js');
|
|
29
|
+
var get = require('./util/get.js');
|
|
29
30
|
|
|
30
31
|
var defaultRenderOptions = {
|
|
31
32
|
classPrefix: 'docx-viewer',
|
|
@@ -47,8 +48,8 @@ var defaultRenderOptions = {
|
|
|
47
48
|
renderHeader: true,
|
|
48
49
|
renderFooter: true,
|
|
49
50
|
data: {},
|
|
50
|
-
evalVar: function (
|
|
51
|
-
return
|
|
51
|
+
evalVar: function (path, data) {
|
|
52
|
+
return get.get(data, path);
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
55
|
var Word = /** @class */ (function () {
|
|
@@ -297,17 +298,19 @@ var Word = /** @class */ (function () {
|
|
|
297
298
|
* 进行单个文本替换
|
|
298
299
|
*/
|
|
299
300
|
Word.prototype.replaceText = function (text) {
|
|
301
|
+
var _this = this;
|
|
300
302
|
if (this.renderOptions.enableVar === false) {
|
|
301
303
|
return text;
|
|
302
304
|
}
|
|
303
305
|
var data = this.renderOptions.data;
|
|
304
306
|
if (text.indexOf('{{') !== -1) {
|
|
305
|
-
text = text.replace(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
307
|
+
text = text.replace(/{{([^}]+)}}/g, function (all, group) {
|
|
308
|
+
var result = _this.renderOptions.evalVar(group, data);
|
|
309
|
+
if (typeof result === 'undefined') {
|
|
310
|
+
return '';
|
|
311
|
+
}
|
|
312
|
+
return String(result);
|
|
313
|
+
});
|
|
311
314
|
}
|
|
312
315
|
return text;
|
|
313
316
|
};
|
|
@@ -420,18 +423,21 @@ var Word = /** @class */ (function () {
|
|
|
420
423
|
* 获取主题色
|
|
421
424
|
*/
|
|
422
425
|
Word.prototype.getThemeColor = function (name) {
|
|
423
|
-
var _a, _b
|
|
426
|
+
var _a, _b;
|
|
424
427
|
if (this.settings.clrSchemeMapping) {
|
|
425
428
|
name = this.settings.clrSchemeMapping[name] || name;
|
|
426
429
|
}
|
|
427
430
|
if (this.themes && this.themes.length > 0) {
|
|
428
431
|
var theme = this.themes[0];
|
|
429
|
-
var
|
|
432
|
+
var colors = (_b = (_a = theme.themeElements) === null || _a === void 0 ? void 0 : _a.clrScheme) === null || _b === void 0 ? void 0 : _b.colors;
|
|
433
|
+
var color = colors === null || colors === void 0 ? void 0 : colors[name];
|
|
430
434
|
if (color) {
|
|
431
435
|
return color;
|
|
432
436
|
}
|
|
433
437
|
else {
|
|
438
|
+
// 找不到可能是从其它地方拷贝过来的,这时取 accent1
|
|
434
439
|
console.warn('unknown theme color: ' + name);
|
|
440
|
+
return (colors === null || colors === void 0 ? void 0 : colors['accent1']) || '';
|
|
435
441
|
}
|
|
436
442
|
}
|
|
437
443
|
return '';
|
|
@@ -5,6 +5,7 @@ import { CSSStyle } from './../Style';
|
|
|
5
5
|
import Word from '../../Word';
|
|
6
6
|
import { Pic } from './Pic';
|
|
7
7
|
import { WPS } from '../word/wps/WPS';
|
|
8
|
+
import { WPG } from '../word/wps/WPG';
|
|
8
9
|
/**
|
|
9
10
|
* drawing 在文档中的位置,目前有两种情况,child 和 anchor
|
|
10
11
|
*/
|
|
@@ -24,6 +25,7 @@ export interface Anchor {
|
|
|
24
25
|
export declare class Drawing {
|
|
25
26
|
pic?: Pic;
|
|
26
27
|
wps?: WPS;
|
|
28
|
+
wpg?: WPG;
|
|
27
29
|
diagram?: ConstrainDOMStringParameters;
|
|
28
30
|
position: Position;
|
|
29
31
|
anchor?: Anchor;
|
|
@@ -8,6 +8,7 @@ var OpenXML = require('../../OpenXML.js');
|
|
|
8
8
|
var Pic = require('./Pic.js');
|
|
9
9
|
var WPS = require('../word/wps/WPS.js');
|
|
10
10
|
var Diagram = require('./diagram/Diagram.js');
|
|
11
|
+
var WPG = require('../word/wps/WPG.js');
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* 目前图片和 textbox 都会依赖这个
|
|
@@ -127,6 +128,9 @@ var Drawing = /** @class */ (function () {
|
|
|
127
128
|
case 'wps:wsp':
|
|
128
129
|
drawing.wps = WPS.WPS.fromXML(word, graphicDataChild);
|
|
129
130
|
break;
|
|
131
|
+
case 'wpg:wgp':
|
|
132
|
+
drawing.wpg = WPG.WPG.fromXML(word, graphicDataChild);
|
|
133
|
+
break;
|
|
130
134
|
case 'dgm:relIds':
|
|
131
135
|
// 这个是 diagram 的关系
|
|
132
136
|
// http://webapp.docx4java.org/OnlineDemo/ecma376/DrawingML/relIds.html
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var tslib = require('tslib');
|
|
5
6
|
var parseSize = require('../../parse/parseSize.js');
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -11,20 +12,48 @@ var Transform = /** @class */ (function () {
|
|
|
11
12
|
function Transform() {
|
|
12
13
|
}
|
|
13
14
|
Transform.fromXML = function (word, element) {
|
|
15
|
+
var e_1, _a;
|
|
14
16
|
var transform = new Transform();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
try {
|
|
18
|
+
for (var _b = tslib.__values(element.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
19
|
+
var child = _c.value;
|
|
20
|
+
var tagName = child.tagName;
|
|
21
|
+
switch (tagName) {
|
|
22
|
+
case 'a:off':
|
|
23
|
+
transform.off = {
|
|
24
|
+
x: parseSize.parseSize(child, 'x', parseSize.LengthUsage.Emu),
|
|
25
|
+
y: parseSize.parseSize(child, 'y', parseSize.LengthUsage.Emu)
|
|
26
|
+
};
|
|
27
|
+
break;
|
|
28
|
+
case 'a:ext':
|
|
29
|
+
transform.ext = {
|
|
30
|
+
cx: parseSize.parseSize(child, 'cx', parseSize.LengthUsage.Emu),
|
|
31
|
+
cy: parseSize.parseSize(child, 'cy', parseSize.LengthUsage.Emu)
|
|
32
|
+
};
|
|
33
|
+
break;
|
|
34
|
+
case 'a:chOff':
|
|
35
|
+
transform.chOff = {
|
|
36
|
+
x: parseSize.parseSize(child, 'x', parseSize.LengthUsage.Emu),
|
|
37
|
+
y: parseSize.parseSize(child, 'y', parseSize.LengthUsage.Emu)
|
|
38
|
+
};
|
|
39
|
+
break;
|
|
40
|
+
case 'a:chExt':
|
|
41
|
+
transform.chExt = {
|
|
42
|
+
cx: parseSize.parseSize(child, 'cx', parseSize.LengthUsage.Emu),
|
|
43
|
+
cy: parseSize.parseSize(child, 'cy', parseSize.LengthUsage.Emu)
|
|
44
|
+
};
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
console.warn('Transform: Unknown tag ', tagName, child);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
21
50
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
51
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
52
|
+
finally {
|
|
53
|
+
try {
|
|
54
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
55
|
+
}
|
|
56
|
+
finally { if (e_1) throw e_1.error; }
|
|
28
57
|
}
|
|
29
58
|
var rot = element.getAttribute('rot');
|
|
30
59
|
if (rot) {
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 图形组,目前是当成 wps 用了
|
|
3
3
|
*/
|
|
4
|
+
import { WPS } from './WPS';
|
|
5
|
+
import Word from '../../../Word';
|
|
6
|
+
import { ShapePr } from '../../drawing/ShapeProperties';
|
|
7
|
+
import { Pic } from '../../drawing/Pic';
|
|
4
8
|
export declare class WPG {
|
|
9
|
+
wps: WPS[];
|
|
10
|
+
wpg: WPG[];
|
|
11
|
+
spPr?: ShapePr;
|
|
12
|
+
pic?: Pic;
|
|
13
|
+
static fromXML(word: Word, element: Element): WPG;
|
|
5
14
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var WPS = require('./WPS.js');
|
|
7
|
+
var ShapeProperties = require('../../drawing/ShapeProperties.js');
|
|
8
|
+
var Pic = require('../../drawing/Pic.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 图形组,目前是当成 wps 用了
|
|
12
|
+
*/
|
|
13
|
+
var WPG = /** @class */ (function () {
|
|
14
|
+
function WPG() {
|
|
15
|
+
}
|
|
16
|
+
WPG.fromXML = function (word, element) {
|
|
17
|
+
var e_1, _a;
|
|
18
|
+
var wpg = new WPG();
|
|
19
|
+
var wps = [];
|
|
20
|
+
wpg.wps = wps;
|
|
21
|
+
wpg.wpg = [];
|
|
22
|
+
try {
|
|
23
|
+
for (var _b = tslib.__values(element.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
24
|
+
var child = _c.value;
|
|
25
|
+
var tagName = child.tagName;
|
|
26
|
+
switch (tagName) {
|
|
27
|
+
case 'wpg:cNvGrpSpPr':
|
|
28
|
+
// 和展现无关
|
|
29
|
+
break;
|
|
30
|
+
case 'wpg:grpSpPr':
|
|
31
|
+
wpg.spPr = ShapeProperties.ShapePr.fromXML(word, child);
|
|
32
|
+
break;
|
|
33
|
+
case 'wps:wsp':
|
|
34
|
+
wps.push(WPS.WPS.fromXML(word, child));
|
|
35
|
+
break;
|
|
36
|
+
case 'pic:pic':
|
|
37
|
+
wpg.pic = Pic.Pic.fromXML(word, child);
|
|
38
|
+
break;
|
|
39
|
+
case 'wpg:grpSp':
|
|
40
|
+
// 组合中的组合
|
|
41
|
+
wpg.wpg.push(WPG.fromXML(word, child));
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
console.warn('WPS: Unknown tag ', tagName, child);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
49
|
+
finally {
|
|
50
|
+
try {
|
|
51
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
52
|
+
}
|
|
53
|
+
finally { if (e_1) throw e_1.error; }
|
|
54
|
+
}
|
|
55
|
+
return wpg;
|
|
56
|
+
};
|
|
57
|
+
return WPG;
|
|
58
|
+
}());
|
|
59
|
+
|
|
60
|
+
exports.WPG = WPG;
|