office-viewer 0.1.3 → 0.1.5

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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/esm/Word.js +16 -10
  3. package/esm/openxml/drawing/Drawing.d.ts +2 -0
  4. package/esm/openxml/drawing/Drawing.js +4 -0
  5. package/esm/openxml/drawing/Transform.d.ts +2 -0
  6. package/esm/openxml/drawing/Transform.js +41 -12
  7. package/esm/openxml/word/Tab.d.ts +1 -1
  8. package/esm/openxml/word/wps/WPG.d.ts +10 -1
  9. package/esm/openxml/word/wps/WPG.js +56 -0
  10. package/esm/openxml/word/wps/WPS.js +1 -0
  11. package/esm/render/renderDrawing.js +183 -71
  12. package/esm/render/renderParagraph.js +22 -0
  13. package/esm/render/renderRun.js +7 -2
  14. package/esm/render/renderStyle.js +1 -1
  15. package/esm/render/renderTab.d.ts +1 -1
  16. package/esm/render/renderTab.js +7 -1
  17. package/esm/util/get.d.ts +4 -0
  18. package/esm/util/get.js +18 -0
  19. package/esm/util/mergeRun.js +7 -1
  20. package/esm/util/replaceVar.js +2 -1
  21. package/lib/Word.js +16 -10
  22. package/lib/openxml/drawing/Drawing.d.ts +2 -0
  23. package/lib/openxml/drawing/Drawing.js +4 -0
  24. package/lib/openxml/drawing/Transform.d.ts +2 -0
  25. package/lib/openxml/drawing/Transform.js +41 -12
  26. package/lib/openxml/word/Tab.d.ts +1 -1
  27. package/lib/openxml/word/wps/WPG.d.ts +10 -1
  28. package/lib/openxml/word/wps/WPG.js +60 -0
  29. package/lib/openxml/word/wps/WPS.js +1 -0
  30. package/lib/render/renderDrawing.js +183 -71
  31. package/lib/render/renderParagraph.js +22 -0
  32. package/lib/render/renderRun.js +7 -2
  33. package/lib/render/renderStyle.js +1 -1
  34. package/lib/render/renderTab.d.ts +1 -1
  35. package/lib/render/renderTab.js +7 -1
  36. package/lib/util/get.d.ts +4 -0
  37. package/lib/util/get.js +22 -0
  38. package/lib/util/mergeRun.js +7 -1
  39. package/lib/util/replaceVar.js +2 -1
  40. package/package.json +2 -3
@@ -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
 
@@ -0,0 +1,4 @@
1
+ /**
2
+ * https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
3
+ */
4
+ export declare const get: (obj: any, path: string, defaultValue?: undefined) => any;
@@ -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 };
@@ -35,7 +35,13 @@ function canMerge(element) {
35
35
  if (childChild.tagName === 'w:t') {
36
36
  hasText = true;
37
37
  textHasSpace = childChild.getAttribute('xml:space') === 'preserve';
38
- break;
38
+ if (textHasSpace) {
39
+ break;
40
+ }
41
+ }
42
+ // 有 tab 的情况下不能合并
43
+ if (childChild.tagName === 'w:tab') {
44
+ return false;
39
45
  }
40
46
  }
41
47
  }
@@ -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.appendChild(newTr);
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 (t) {
51
- return t;
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(/^{{/g, '').replace(/}}$/g, '');
306
- var result = this.renderOptions.evalVar(text, data);
307
- if (typeof result === 'undefined') {
308
- return '';
309
- }
310
- return String(result);
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, _c;
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 color = (_c = (_b = (_a = theme.themeElements) === null || _a === void 0 ? void 0 : _a.clrScheme) === null || _b === void 0 ? void 0 : _b.colors) === null || _c === void 0 ? void 0 : _c[name];
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
@@ -13,6 +13,8 @@ export interface Ext {
13
13
  export declare class Transform {
14
14
  off?: Off;
15
15
  ext?: Ext;
16
+ chOff?: Off;
17
+ chExt?: Ext;
16
18
  rot?: number;
17
19
  static fromXML(word: Word, element: Element): Transform;
18
20
  }
@@ -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
- var off = element.getElementsByTagName('a:off').item(0);
16
- if (off) {
17
- transform.off = {
18
- x: parseSize.parseSize(off, 'x', parseSize.LengthUsage.Emu),
19
- y: parseSize.parseSize(off, 'y', parseSize.LengthUsage.Emu)
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
- var ext = element.getElementsByTagName('a:ext').item(0);
23
- if (ext) {
24
- transform.ext = {
25
- cx: parseSize.parseSize(ext, 'cx', parseSize.LengthUsage.Emu),
26
- cy: parseSize.parseSize(ext, 'cy', parseSize.LengthUsage.Emu)
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,7 +1,7 @@
1
1
  import Word from '../../Word';
2
2
  import { ST_TabJc, ST_TabTlc } from '../Types';
3
3
  export declare class Tab {
4
- type: ST_TabJc;
4
+ type: ST_TabJc | 'left';
5
5
  pos: string;
6
6
  leader?: ST_TabTlc;
7
7
  static fromXML(word: Word, element: Element): Tab;
@@ -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;
@@ -88,6 +88,7 @@ var WPS = /** @class */ (function () {
88
88
  var tagName = child.tagName;
89
89
  switch (tagName) {
90
90
  case 'wps:cNvSpPr':
91
+ case 'wps:cNvPr':
91
92
  // 和展现无关
92
93
  break;
93
94
  case 'wps:spPr':
@@ -14,8 +14,9 @@ var renderCustGeom = require('./renderCustGeom.js');
14
14
  /**
15
15
  * 渲染图片
16
16
  */
17
- function renderPic(pic, word, drawing) {
18
- var _a, _b;
17
+ function renderPic(pic, word, wpg) {
18
+ var _a, _b, _c;
19
+ if (wpg === void 0) { wpg = null; }
19
20
  var blip = (_a = pic.blipFill) === null || _a === void 0 ? void 0 : _a.blip;
20
21
  if (blip && blip.src) {
21
22
  var img = document.createElement('img');
@@ -35,15 +36,27 @@ function renderPic(pic, word, drawing) {
35
36
  }
36
37
  var xfrm = (_b = pic.spPr) === null || _b === void 0 ? void 0 : _b.xfrm;
37
38
  if (xfrm) {
38
- var off = xfrm.off;
39
- if (off) {
40
- img.style.left = off.x;
41
- img.style.top = off.y;
39
+ if (wpg) {
40
+ var rect = getRectInGroup(xfrm, (_c = wpg.spPr) === null || _c === void 0 ? void 0 : _c.xfrm);
41
+ if (rect) {
42
+ img.style.position = 'absolute';
43
+ img.style.left = rect.left + 'px';
44
+ img.style.top = rect.top + 'px';
45
+ img.style.width = rect.width + 'px';
46
+ img.style.height = rect.height + 'px';
47
+ }
42
48
  }
43
- var ext = xfrm.ext;
44
- if (ext) {
45
- img.style.width = ext.cx;
46
- img.style.height = ext.cy;
49
+ else {
50
+ var off = xfrm.off;
51
+ if (off) {
52
+ img.style.left = off.x;
53
+ img.style.top = off.y;
54
+ }
55
+ var ext = xfrm.ext;
56
+ if (ext) {
57
+ img.style.width = ext.cx;
58
+ img.style.height = ext.cy;
59
+ }
47
60
  }
48
61
  if (xfrm.rot) {
49
62
  img.style.transform = "rotate(".concat(xfrm.rot, "deg)");
@@ -53,6 +66,162 @@ function renderPic(pic, word, drawing) {
53
66
  }
54
67
  return null;
55
68
  }
69
+ /**
70
+ * 获取在 group 中的位置
71
+ * @param xfrm 元素的位置定义
72
+ * @param groupXfrm 分组中的位置定义
73
+ */
74
+ function getRectInGroup(xfrm, groupXfrm) {
75
+ var off = xfrm.off;
76
+ var width = parseFloat(xfrm.ext.cx.replace('px', ''));
77
+ var height = parseFloat(xfrm.ext.cy.replace('px', ''));
78
+ if (off && groupXfrm.chOff && groupXfrm.ext && groupXfrm.chExt) {
79
+ // 先算缩放比
80
+ var scaleX = parseFloat(groupXfrm.ext.cx.replace('px', '')) /
81
+ parseFloat(groupXfrm.chExt.cx.replace('px', ''));
82
+ var scaleY = parseFloat(groupXfrm.ext.cy.replace('px', '')) /
83
+ parseFloat(groupXfrm.chExt.cy.replace('px', ''));
84
+ var groupOffX = parseFloat(groupXfrm.chOff.x.replace('px', ''));
85
+ var groupOffY = parseFloat(groupXfrm.chOff.y.replace('px', ''));
86
+ var x = parseFloat(off.x.replace('px', ''));
87
+ var y = parseFloat(off.y.replace('px', ''));
88
+ return {
89
+ left: scaleX * (x - groupOffX),
90
+ top: scaleY * (y - groupOffY),
91
+ width: scaleX * width,
92
+ height: scaleY * height
93
+ };
94
+ }
95
+ return null;
96
+ }
97
+ /**
98
+ * 渲染文本框
99
+ */
100
+ function renderWps(word, container, wps, wpg) {
101
+ var e_1, _a;
102
+ var _b;
103
+ if (wpg === void 0) { wpg = null; }
104
+ var wpsStyle = wps.wpsStyle;
105
+ var spPr = wps.spPr;
106
+ dom.applyStyle(container, wps.style);
107
+ if (wpsStyle === null || wpsStyle === void 0 ? void 0 : wpsStyle.fontColor) {
108
+ container.style.color = wpsStyle.fontColor;
109
+ }
110
+ if (spPr === null || spPr === void 0 ? void 0 : spPr.xfrm) {
111
+ var ext = spPr.xfrm.ext;
112
+ if (ext) {
113
+ var width = parseFloat(ext.cx.replace('px', ''));
114
+ var height = parseFloat(ext.cy.replace('px', ''));
115
+ // 在分组中的计算方式不一样,另外在分组中还需要绝对定位
116
+ // 这个计算方法在官方文档里没找到
117
+ if (wpg) {
118
+ container.style.position = 'absolute';
119
+ var rect = getRectInGroup(spPr.xfrm, (_b = wpg.spPr) === null || _b === void 0 ? void 0 : _b.xfrm);
120
+ if (rect) {
121
+ container.style.left = rect.left + 'px';
122
+ container.style.top = rect.top + 'px';
123
+ width = rect.width;
124
+ height = rect.height;
125
+ }
126
+ }
127
+ container.style.width = width + 'px';
128
+ container.style.height = height + 'px';
129
+ if (spPr.geom) {
130
+ dom.appendChild(container, renderGeom.renderGeom(spPr.geom, spPr, width, height, wps.wpsStyle));
131
+ }
132
+ if (spPr.custGeom) {
133
+ dom.appendChild(container, renderCustGeom.renderCustGeom(spPr.custGeom, spPr, width, height, wps.wpsStyle));
134
+ }
135
+ }
136
+ if (spPr.xfrm.rot) {
137
+ container.style.transform = "rotate(".concat(spPr.xfrm.rot, "deg)");
138
+ }
139
+ }
140
+ var txbxContent = wps.txbxContent;
141
+ if (txbxContent.length) {
142
+ // 为了实现垂直居中,将父容器改成 table 布局
143
+ var textContainer = document.createElement('div');
144
+ textContainer.dataset.name = 'textContainer';
145
+ container.style.display = 'table';
146
+ textContainer.style.display = 'table-cell';
147
+ textContainer.style.verticalAlign = 'middle';
148
+ if (wps.style && wps.style['vertical-align']) {
149
+ textContainer.style.verticalAlign = wps.style['vertical-align'];
150
+ // 容器的 vertical-align 需要去掉,虽然也不影响
151
+ container.style.verticalAlign = '';
152
+ }
153
+ dom.appendChild(container, textContainer);
154
+ try {
155
+ for (var txbxContent_1 = tslib.__values(txbxContent), txbxContent_1_1 = txbxContent_1.next(); !txbxContent_1_1.done; txbxContent_1_1 = txbxContent_1.next()) {
156
+ var txbxContentChild = txbxContent_1_1.value;
157
+ if (txbxContentChild instanceof Paragraph.Paragraph) {
158
+ dom.appendChild(textContainer, renderParagraph["default"](word, txbxContentChild));
159
+ }
160
+ else if (txbxContentChild instanceof Table.Table) {
161
+ dom.appendChild(textContainer, renderTable["default"](word, txbxContentChild));
162
+ }
163
+ }
164
+ }
165
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
166
+ finally {
167
+ try {
168
+ if (txbxContent_1_1 && !txbxContent_1_1.done && (_a = txbxContent_1.return)) _a.call(txbxContent_1);
169
+ }
170
+ finally { if (e_1) throw e_1.error; }
171
+ }
172
+ }
173
+ }
174
+ function renderWpg(word, wpg) {
175
+ var e_2, _a, e_3, _b;
176
+ var _c, _d;
177
+ var container = document.createElement('div');
178
+ var wpgContainer = document.createElement('div');
179
+ var spPr = wpg.spPr;
180
+ if (spPr === null || spPr === void 0 ? void 0 : spPr.xfrm) {
181
+ var ext = (_c = spPr === null || spPr === void 0 ? void 0 : spPr.xfrm) === null || _c === void 0 ? void 0 : _c.ext;
182
+ if (ext) {
183
+ wpgContainer.style.width = ext.cx;
184
+ wpgContainer.style.height = ext.cy;
185
+ }
186
+ var rot = (_d = spPr === null || spPr === void 0 ? void 0 : spPr.xfrm) === null || _d === void 0 ? void 0 : _d.rot;
187
+ if (rot) {
188
+ wpgContainer.style.transform = "rotate(".concat(rot, "deg)");
189
+ }
190
+ }
191
+ try {
192
+ for (var _e = tslib.__values(wpg.wps), _f = _e.next(); !_f.done; _f = _e.next()) {
193
+ var wps = _f.value;
194
+ var wpsContainer = document.createElement('div');
195
+ renderWps(word, wpsContainer, wps, wpg);
196
+ dom.appendChild(wpgContainer, wpsContainer);
197
+ }
198
+ }
199
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
200
+ finally {
201
+ try {
202
+ if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
203
+ }
204
+ finally { if (e_2) throw e_2.error; }
205
+ }
206
+ try {
207
+ for (var _g = tslib.__values(wpg.wpg), _h = _g.next(); !_h.done; _h = _g.next()) {
208
+ var childWpg = _h.value;
209
+ dom.appendChild(container, renderWpg(word, childWpg));
210
+ }
211
+ }
212
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
213
+ finally {
214
+ try {
215
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
216
+ }
217
+ finally { if (e_3) throw e_3.error; }
218
+ }
219
+ if (wpg.pic) {
220
+ dom.appendChild(wpgContainer, renderPic(wpg.pic, word, wpg));
221
+ }
222
+ dom.appendChild(container, wpgContainer);
223
+ return container;
224
+ }
56
225
  /**
57
226
  * 渲染图片,目前只支持 picture
58
227
  * http://officeopenxml.com/drwOverview.php
@@ -60,7 +229,6 @@ function renderPic(pic, word, drawing) {
60
229
  *
61
230
  */
62
231
  function renderDrawing(word, drawing, inHeader) {
63
- var e_1, _a;
64
232
  var container = document.createElement('div');
65
233
  if (drawing.position === 'inline') {
66
234
  container.style.display = 'inline-block';
@@ -76,66 +244,10 @@ function renderDrawing(word, drawing, inHeader) {
76
244
  container.dataset.id = drawing.id || '';
77
245
  container.dataset.name = drawing.name || '';
78
246
  if (drawing.wps) {
79
- var wps = drawing.wps;
80
- var wpsStyle = wps.wpsStyle;
81
- var spPr = wps.spPr;
82
- dom.applyStyle(container, wps.style);
83
- if (wpsStyle === null || wpsStyle === void 0 ? void 0 : wpsStyle.fontColor) {
84
- container.style.color = wpsStyle.fontColor;
85
- }
86
- if (spPr === null || spPr === void 0 ? void 0 : spPr.xfrm) {
87
- var ext = spPr.xfrm.ext;
88
- if (ext) {
89
- container.style.width = ext.cx;
90
- container.style.height = ext.cy;
91
- if (spPr.geom) {
92
- var width = parseFloat(ext.cx.replace('px', ''));
93
- var height = parseFloat(ext.cy.replace('px', ''));
94
- dom.appendChild(container, renderGeom.renderGeom(spPr.geom, spPr, width, height, wps.wpsStyle));
95
- }
96
- if (spPr.custGeom) {
97
- var width = parseFloat(ext.cx.replace('px', ''));
98
- var height = parseFloat(ext.cy.replace('px', ''));
99
- dom.appendChild(container, renderCustGeom.renderCustGeom(spPr.custGeom, spPr, width, height, wps.wpsStyle));
100
- }
101
- }
102
- if (spPr.xfrm.rot) {
103
- container.style.transform = "rotate(".concat(spPr.xfrm.rot, "deg)");
104
- }
105
- }
106
- var txbxContent = wps.txbxContent;
107
- if (txbxContent.length) {
108
- // 为了实现垂直居中,将父容器改成 table 布局
109
- var textContainer = document.createElement('div');
110
- textContainer.dataset.name = 'textContainer';
111
- container.style.display = 'table';
112
- textContainer.style.display = 'table-cell';
113
- textContainer.style.verticalAlign = 'middle';
114
- if (wps.style && wps.style['vertical-align']) {
115
- textContainer.style.verticalAlign = wps.style['vertical-align'];
116
- // 容器的 vertical-align 需要去掉,虽然也不影响
117
- container.style.verticalAlign = '';
118
- }
119
- dom.appendChild(container, textContainer);
120
- try {
121
- for (var txbxContent_1 = tslib.__values(txbxContent), txbxContent_1_1 = txbxContent_1.next(); !txbxContent_1_1.done; txbxContent_1_1 = txbxContent_1.next()) {
122
- var txbxContentChild = txbxContent_1_1.value;
123
- if (txbxContentChild instanceof Paragraph.Paragraph) {
124
- dom.appendChild(textContainer, renderParagraph["default"](word, txbxContentChild));
125
- }
126
- else if (txbxContentChild instanceof Table.Table) {
127
- dom.appendChild(textContainer, renderTable["default"](word, txbxContentChild));
128
- }
129
- }
130
- }
131
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
132
- finally {
133
- try {
134
- if (txbxContent_1_1 && !txbxContent_1_1.done && (_a = txbxContent_1.return)) _a.call(txbxContent_1);
135
- }
136
- finally { if (e_1) throw e_1.error; }
137
- }
138
- }
247
+ renderWps(word, container, drawing.wps);
248
+ }
249
+ if (drawing.wpg) {
250
+ dom.appendChild(container, renderWpg(word, drawing.wpg));
139
251
  }
140
252
  // 如果没内容就不渲染了,避免高度导致撑开父节点
141
253
  if (container.children.length === 0) {