office-viewer 0.3.14 → 0.3.16

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 (43) hide show
  1. package/esm/Word.d.ts +4 -0
  2. package/esm/Word.js +34 -0
  3. package/esm/createOfficeViewer.js +33 -13
  4. package/esm/excel/render/dnd/handleMouseup.js +3 -2
  5. package/esm/excel/render/drawing/chart/buildLabel.d.ts +1 -62
  6. package/esm/excel/render/drawing/chart/convertLegend.d.ts +1 -1
  7. package/esm/excel/render/drawing/chart/fromAreaChart.d.ts +1 -62
  8. package/esm/excel/render/drawing/chart/fromLineChart.d.ts +1 -62
  9. package/esm/node_modules/xlsx/xlsx.mjs.js +24451 -0
  10. package/esm/openxml/word/Note.d.ts +1 -0
  11. package/esm/openxml/word/Note.js +3 -0
  12. package/esm/openxml/word/Run.d.ts +6 -1
  13. package/esm/openxml/word/Run.js +14 -1
  14. package/esm/util/fflate.js +2 -2
  15. package/esm/util/saxes.js +1 -1
  16. package/esm/word/render/renderNotes.js +19 -0
  17. package/esm/word/render/renderRun.js +17 -1
  18. package/lib/Word.d.ts +4 -0
  19. package/lib/Word.js +34 -0
  20. package/lib/createOfficeViewer.d.ts +1 -1
  21. package/lib/createOfficeViewer.js +33 -13
  22. package/lib/excel/formula/builtinFunctions.d.ts +1 -1
  23. package/lib/excel/lang/lang.d.ts +1 -1
  24. package/lib/excel/render/dnd/handleMouseup.js +3 -2
  25. package/lib/excel/render/dnd/mousedownColHeader.d.ts +1 -1
  26. package/lib/excel/render/dnd/mousedownRowHeader.d.ts +1 -1
  27. package/lib/excel/render/drawing/chart/buildLabel.d.ts +1 -62
  28. package/lib/excel/render/drawing/chart/convertLegend.d.ts +1 -1
  29. package/lib/excel/render/drawing/chart/fromAreaChart.d.ts +1 -62
  30. package/lib/excel/render/drawing/chart/fromLineChart.d.ts +1 -62
  31. package/lib/node_modules/xlsx/xlsx.mjs.js +24472 -0
  32. package/lib/openxml/word/Note.d.ts +1 -0
  33. package/lib/openxml/word/Note.js +3 -0
  34. package/lib/openxml/word/Run.d.ts +6 -1
  35. package/lib/openxml/word/Run.js +14 -0
  36. package/lib/package/XMLPackageParser.d.ts +1 -1
  37. package/lib/package/ZipPackageParser.d.ts +1 -1
  38. package/lib/util/fflate.js +2 -2
  39. package/lib/util/saxes.js +1 -1
  40. package/lib/word/parse/jcToTextAlign.d.ts +1 -1
  41. package/lib/word/render/renderNotes.js +19 -0
  42. package/lib/word/render/renderRun.js +16 -0
  43. package/package.json +8 -3
package/esm/Word.d.ts CHANGED
@@ -170,6 +170,10 @@ export default class Word implements OfficeViewer {
170
170
  currentParagraph: Paragraph;
171
171
  footNotes: Record<string, Note>;
172
172
  endNotes: Record<string, Note>;
173
+ /**
174
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
175
+ */
176
+ noteIndexMap: Record<string, number>;
173
177
  /**
174
178
  * 当前页码
175
179
  */
package/esm/Word.js CHANGED
@@ -77,6 +77,10 @@ var Word = /** @class */ (function () {
77
77
  this.wrapClassName = 'docx-viewer-wrapper';
78
78
  this.footNotes = {};
79
79
  this.endNotes = {};
80
+ /**
81
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
82
+ */
83
+ this.noteIndexMap = {};
80
84
  this.inited = false;
81
85
  /**
82
86
  * 分页标记,如果为 true,那么在渲染的时候会强制分页
@@ -280,6 +284,29 @@ var Word = /** @class */ (function () {
280
284
  }
281
285
  finally { if (e_6) throw e_6.error; }
282
286
  }
287
+ // Fallback: some docx files declare footnotes/endnotes via relationships
288
+ // rather than ContentTypes overrides (e.g., Word-generated files)
289
+ if (Object.keys(this.footNotes).length === 0 &&
290
+ this.parser.fileExists('/word/footnotes.xml')) {
291
+ this.footNotes = parseFootnotes(this, this.parser.getXML('/word/footnotes.xml'));
292
+ }
293
+ if (Object.keys(this.endNotes).length === 0 &&
294
+ this.parser.fileExists('/word/endnotes.xml')) {
295
+ this.endNotes = parseEndnotes(this, this.parser.getXML('/word/endnotes.xml'));
296
+ }
297
+ // 建立序号映射,供正文引用渲染使用
298
+ var fnIndex = 1;
299
+ for (var id in this.footNotes) {
300
+ if (id !== '0' && id !== '-1' && !this.footNotes[id].isEmpty()) {
301
+ this.noteIndexMap['footnote-' + id] = fnIndex++;
302
+ }
303
+ }
304
+ var enIndex = 1;
305
+ for (var id in this.endNotes) {
306
+ if (id !== '0' && id !== '-1' && !this.endNotes[id].isEmpty()) {
307
+ this.noteIndexMap['endnote-' + id] = enIndex++;
308
+ }
309
+ }
283
310
  };
284
311
  /**
285
312
  * 获取全局关系
@@ -446,8 +473,14 @@ var Word = /** @class */ (function () {
446
473
  return [];
447
474
  }
448
475
  var classNames = [this.getStyleIdDisplayName(stylId)];
476
+ if (stylId.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
477
+ classNames.push('docx-' + stylId);
478
+ }
449
479
  if (style.basedOn) {
450
480
  classNames.unshift(this.getStyleIdDisplayName(style.basedOn));
481
+ if (style.basedOn.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
482
+ classNames.push('docx-' + style.basedOn);
483
+ }
451
484
  }
452
485
  return classNames;
453
486
  };
@@ -492,6 +525,7 @@ var Word = /** @class */ (function () {
492
525
  */
493
526
  Word.prototype.addClass = function (element, className) {
494
527
  element.classList.add("".concat(this.getClassPrefix(), "-").concat(className));
528
+ element.classList.add("docx-".concat(className));
495
529
  };
496
530
  /**
497
531
  * 更新页面中的变量,这个要在 render 后运行
@@ -19,8 +19,8 @@ import { fileTypeFromArrayBuffer } from './util/fileType.js';
19
19
  function createOfficeViewer(docFile, renderOptions, fileName, parser) {
20
20
  if (parser === void 0) { parser = new ZipPackageParser(); }
21
21
  return __awaiter(this, void 0, void 0, function () {
22
- var fileExt, excel, fileType, isWord, isExcel, contentTypes, _a, _b, item, excel;
23
- var e_1, _c;
22
+ var fileExt, excel, buffer, fileType, XLSX, workbook, rawData, e_1, isWord, isExcel, contentTypes, _a, _b, item, excel;
23
+ var e_2, _c;
24
24
  return __generator(this, function (_d) {
25
25
  switch (_d.label) {
26
26
  case 0:
@@ -33,15 +33,35 @@ function createOfficeViewer(docFile, renderOptions, fileName, parser) {
33
33
  _d.sent();
34
34
  return [2 /*return*/, excel];
35
35
  case 2:
36
- fileType = fileTypeFromArrayBuffer(docFile);
37
- if (fileType === null || (fileType.ext !== 'zip' && fileType.ext !== 'xml')) {
38
- if ((fileType === null || fileType === void 0 ? void 0 : fileType.ext) === 'cfb') {
39
- return [2 /*return*/, new UnSupport('不支持加密文件')];
40
- }
36
+ buffer = docFile;
37
+ fileType = fileTypeFromArrayBuffer(buffer);
38
+ if (!((fileType === null || fileType === void 0 ? void 0 : fileType.ext) === 'cfb')) return [3 /*break*/, 7];
39
+ _d.label = 3;
40
+ case 3:
41
+ _d.trys.push([3, 5, , 6]);
42
+ return [4 /*yield*/, import('./node_modules/xlsx/xlsx.mjs.js')];
43
+ case 4:
44
+ XLSX = _d.sent();
45
+ workbook = XLSX.read(new Uint8Array(buffer));
46
+ rawData = XLSX.write(workbook, { type: 'array', bookType: 'xlsx' });
47
+ buffer = new Uint8Array(rawData).buffer;
48
+ if (fileName) {
49
+ fileName = fileName.replace(/\.xls$/i, '.xlsx');
50
+ }
51
+ return [3 /*break*/, 6];
52
+ case 5:
53
+ e_1 = _d.sent();
54
+ return [2 /*return*/, new UnSupport('XLS文件转换失败: ' + e_1.message)];
55
+ case 6: return [3 /*break*/, 8];
56
+ case 7:
57
+ if (fileType === null ||
58
+ (fileType.ext !== 'zip' && fileType.ext !== 'xml')) {
41
59
  return [2 /*return*/, new UnSupport('不支持的文件类型: ' + (fileType === null || fileType === void 0 ? void 0 : fileType.ext))];
42
60
  }
61
+ _d.label = 8;
62
+ case 8:
43
63
  try {
44
- parser.load(docFile);
64
+ parser.load(buffer);
45
65
  }
46
66
  catch (error) {
47
67
  return [2 /*return*/, new UnSupport('文件解析失败')];
@@ -64,16 +84,16 @@ function createOfficeViewer(docFile, renderOptions, fileName, parser) {
64
84
  }
65
85
  }
66
86
  }
67
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
87
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
68
88
  finally {
69
89
  try {
70
90
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
71
91
  }
72
- finally { if (e_1) throw e_1.error; }
92
+ finally { if (e_2) throw e_2.error; }
73
93
  }
74
94
  }
75
95
  else {
76
- if (fileName === null || fileName === void 0 ? void 0 : fileName.endsWith('.xlsx')) {
96
+ if ((fileName === null || fileName === void 0 ? void 0 : fileName.endsWith('.xlsx')) || (fileName === null || fileName === void 0 ? void 0 : fileName.endsWith('.xls'))) {
77
97
  isExcel = true;
78
98
  }
79
99
  else if (fileName === null || fileName === void 0 ? void 0 : fileName.endsWith('.docx')) {
@@ -85,10 +105,10 @@ function createOfficeViewer(docFile, renderOptions, fileName, parser) {
85
105
  isWord = true;
86
106
  }
87
107
  if (isWord) {
88
- return [2 /*return*/, new Word(docFile, renderOptions, parser)];
108
+ return [2 /*return*/, new Word(buffer, renderOptions, parser)];
89
109
  }
90
110
  else if (isExcel) {
91
- excel = new Excel(docFile, fileName, renderOptions, parser);
111
+ excel = new Excel(buffer, fileName, renderOptions, parser);
92
112
  return [2 /*return*/, excel];
93
113
  }
94
114
  else {
@@ -3,12 +3,13 @@ import { dragState, resetDragState } from './handleMousedown.js';
3
3
 
4
4
  function handleMouseup() {
5
5
  var _a, _b;
6
+ var wasDragging = dragState.isDragging;
6
7
  dragState.isDragging = false;
7
8
  removeEventListener();
8
- if (dragState.dragType === 'col-grid') {
9
+ if (wasDragging && dragState.dragType === 'col-grid') {
9
10
  (_a = dragState.workbook) === null || _a === void 0 ? void 0 : _a.uiEvent.emit('DRAG_COL_GRID_LINE_END', dragState.col, dragState.tmpColWidth);
10
11
  }
11
- if (dragState.dragType === 'row-grid') {
12
+ if (wasDragging && dragState.dragType === 'row-grid') {
12
13
  (_b = dragState.workbook) === null || _b === void 0 ? void 0 : _b.uiEvent.emit('DRAG_ROW_GRID_LINE_END', dragState.row, dragState.tmpRowHeight);
13
14
  }
14
15
  resetDragState();
@@ -1,63 +1,2 @@
1
1
  import { CT_DLbls } from '../../../../openxml/ChartTypes';
2
- export declare function buildLabel(dLbls?: CT_DLbls): {
3
- show?: boolean | undefined;
4
- position?: string | any[] | undefined;
5
- distance?: number | undefined;
6
- rotate?: number | undefined;
7
- offset?: any[] | undefined;
8
- formatter?: string | Function | undefined;
9
- color?: string | undefined;
10
- fontStyle?: string | undefined;
11
- fontWeight?: string | number | undefined;
12
- fontFamily?: string | undefined;
13
- fontSize?: number | undefined;
14
- align?: string | undefined;
15
- verticalAlign?: string | undefined;
16
- lineHeight?: number | undefined;
17
- backgroundColor?: string | object | undefined;
18
- borderColor?: string | undefined;
19
- borderWidth?: number | undefined;
20
- borderRadius?: number | undefined;
21
- padding?: number | any[] | undefined;
22
- shadowColor?: string | undefined;
23
- shadowBlur?: number | undefined;
24
- shadowOffsetX?: number | undefined;
25
- shadowOffsetY?: number | undefined;
26
- width?: string | number | undefined;
27
- height?: string | number | undefined;
28
- textBorderColor?: string | undefined;
29
- textBorderWidth?: number | undefined;
30
- textShadowColor?: string | undefined;
31
- textShadowBlur?: number | undefined;
32
- textShadowOffsetX?: number | undefined;
33
- textShadowOffsetY?: number | undefined;
34
- rich?: {
35
- [userStyle: string]: {
36
- color?: string | undefined;
37
- fontStyle?: string | undefined;
38
- fontWeight?: string | number | undefined;
39
- fontFamily?: string | undefined;
40
- fontSize?: number | undefined;
41
- align?: string | undefined;
42
- verticalAlign?: string | undefined;
43
- lineHeight?: number | undefined;
44
- backgroundColor?: string | object | undefined;
45
- borderColor?: string | undefined;
46
- borderWidth?: number | undefined;
47
- borderRadius?: number | undefined;
48
- padding?: number | any[] | undefined;
49
- shadowColor?: string | undefined;
50
- shadowBlur?: number | undefined;
51
- shadowOffsetX?: number | undefined;
52
- shadowOffsetY?: number | undefined;
53
- width?: string | number | undefined;
54
- height?: string | number | undefined;
55
- textBorderColor?: string | undefined;
56
- textBorderWidth?: number | undefined;
57
- textShadowColor?: string | undefined;
58
- textShadowBlur?: number | undefined;
59
- textShadowOffsetX?: number | undefined;
60
- textShadowOffsetY?: number | undefined;
61
- };
62
- } | undefined;
63
- } | undefined;
2
+ export declare function buildLabel(dLbls?: CT_DLbls): echarts.EChartOption.SeriesLine;
@@ -2,4 +2,4 @@ import { CT_Legend } from '../../../../openxml/ChartTypes';
2
2
  /**
3
3
  * 将 Excel chart 的图例转换为 Echarts 的图例
4
4
  */
5
- export declare function convertLegend(categories: string[], chartLegend?: CT_Legend): import("echarts").EChartOption.Legend;
5
+ export declare function convertLegend(categories: string[], chartLegend?: CT_Legend): echarts.EChartOption.Legend;
@@ -7,68 +7,7 @@ export declare function fromAreaChart(workbook: Workbook, areaChart: CT_AreaChar
7
7
  type: string;
8
8
  stack: string | undefined;
9
9
  data: number[];
10
- label: {
11
- show?: boolean | undefined;
12
- position?: string | any[] | undefined;
13
- distance?: number | undefined;
14
- rotate?: number | undefined;
15
- offset?: any[] | undefined;
16
- formatter?: string | Function | undefined;
17
- color?: string | undefined;
18
- fontStyle?: string | undefined;
19
- fontWeight?: string | number | undefined;
20
- fontFamily?: string | undefined;
21
- fontSize?: number | undefined;
22
- align?: string | undefined;
23
- verticalAlign?: string | undefined;
24
- lineHeight?: number | undefined;
25
- backgroundColor?: string | object | undefined;
26
- borderColor?: string | undefined;
27
- borderWidth?: number | undefined;
28
- borderRadius?: number | undefined;
29
- padding?: number | any[] | undefined;
30
- shadowColor?: string | undefined;
31
- shadowBlur?: number | undefined;
32
- shadowOffsetX?: number | undefined;
33
- shadowOffsetY?: number | undefined;
34
- width?: string | number | undefined;
35
- height?: string | number | undefined;
36
- textBorderColor?: string | undefined;
37
- textBorderWidth?: number | undefined;
38
- textShadowColor?: string | undefined;
39
- textShadowBlur?: number | undefined;
40
- textShadowOffsetX?: number | undefined;
41
- textShadowOffsetY?: number | undefined;
42
- rich?: {
43
- [userStyle: string]: {
44
- color?: string | undefined;
45
- fontStyle?: string | undefined;
46
- fontWeight?: string | number | undefined;
47
- fontFamily?: string | undefined;
48
- fontSize?: number | undefined;
49
- align?: string | undefined;
50
- verticalAlign?: string | undefined;
51
- lineHeight?: number | undefined;
52
- backgroundColor?: string | object | undefined;
53
- borderColor?: string | undefined;
54
- borderWidth?: number | undefined;
55
- borderRadius?: number | undefined;
56
- padding?: number | any[] | undefined;
57
- shadowColor?: string | undefined;
58
- shadowBlur?: number | undefined;
59
- shadowOffsetX?: number | undefined;
60
- shadowOffsetY?: number | undefined;
61
- width?: string | number | undefined;
62
- height?: string | number | undefined;
63
- textBorderColor?: string | undefined;
64
- textBorderWidth?: number | undefined;
65
- textShadowColor?: string | undefined;
66
- textShadowBlur?: number | undefined;
67
- textShadowOffsetX?: number | undefined;
68
- textShadowOffsetY?: number | undefined;
69
- };
70
- } | undefined;
71
- } | undefined;
10
+ label: echarts.EChartOption.SeriesLine;
72
11
  areaStyle: {};
73
12
  }[];
74
13
  };
@@ -7,67 +7,6 @@ export declare function fromLineChart(workbook: Workbook, lineChart: CT_LineChar
7
7
  type: string;
8
8
  stack: string | undefined;
9
9
  data: number[];
10
- label: {
11
- show?: boolean | undefined;
12
- position?: string | any[] | undefined;
13
- distance?: number | undefined;
14
- rotate?: number | undefined;
15
- offset?: any[] | undefined;
16
- formatter?: string | Function | undefined;
17
- color?: string | undefined;
18
- fontStyle?: string | undefined;
19
- fontWeight?: string | number | undefined;
20
- fontFamily?: string | undefined;
21
- fontSize?: number | undefined;
22
- align?: string | undefined;
23
- verticalAlign?: string | undefined;
24
- lineHeight?: number | undefined;
25
- backgroundColor?: string | object | undefined;
26
- borderColor?: string | undefined;
27
- borderWidth?: number | undefined;
28
- borderRadius?: number | undefined;
29
- padding?: number | any[] | undefined;
30
- shadowColor?: string | undefined;
31
- shadowBlur?: number | undefined;
32
- shadowOffsetX?: number | undefined;
33
- shadowOffsetY?: number | undefined;
34
- width?: string | number | undefined;
35
- height?: string | number | undefined;
36
- textBorderColor?: string | undefined;
37
- textBorderWidth?: number | undefined;
38
- textShadowColor?: string | undefined;
39
- textShadowBlur?: number | undefined;
40
- textShadowOffsetX?: number | undefined;
41
- textShadowOffsetY?: number | undefined;
42
- rich?: {
43
- [userStyle: string]: {
44
- color?: string | undefined;
45
- fontStyle?: string | undefined;
46
- fontWeight?: string | number | undefined;
47
- fontFamily?: string | undefined;
48
- fontSize?: number | undefined;
49
- align?: string | undefined;
50
- verticalAlign?: string | undefined;
51
- lineHeight?: number | undefined;
52
- backgroundColor?: string | object | undefined;
53
- borderColor?: string | undefined;
54
- borderWidth?: number | undefined;
55
- borderRadius?: number | undefined;
56
- padding?: number | any[] | undefined;
57
- shadowColor?: string | undefined;
58
- shadowBlur?: number | undefined;
59
- shadowOffsetX?: number | undefined;
60
- shadowOffsetY?: number | undefined;
61
- width?: string | number | undefined;
62
- height?: string | number | undefined;
63
- textBorderColor?: string | undefined;
64
- textBorderWidth?: number | undefined;
65
- textShadowColor?: string | undefined;
66
- textShadowBlur?: number | undefined;
67
- textShadowOffsetX?: number | undefined;
68
- textShadowOffsetY?: number | undefined;
69
- };
70
- } | undefined;
71
- } | undefined;
10
+ label: echarts.EChartOption.SeriesLine;
72
11
  }[];
73
12
  };