@file-viewer/core 2.0.10 → 2.1.0

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 (114) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/config/options.d.ts +1 -1
  4. package/dist/config/options.js +1 -1
  5. package/dist/contracts/types.d.ts +71 -1
  6. package/dist/headless.d.ts +2 -2
  7. package/dist/headless.js +1 -1
  8. package/dist/index.d.ts +9 -6
  9. package/dist/index.js +105 -48
  10. package/dist/platform/assets.d.ts +3 -1
  11. package/dist/platform/assets.js +18 -2
  12. package/dist/registry/capabilities.d.ts +2 -2
  13. package/dist/registry/capabilities.js +2 -1
  14. package/dist/registry/formats.d.ts +20 -7
  15. package/dist/registry/formats.js +14 -5
  16. package/dist/registry/registry.d.ts +8 -1
  17. package/dist/registry/registry.js +29 -0
  18. package/dist/renderers/image.js +1 -10
  19. package/dist/renderers/index.d.ts +320 -2
  20. package/dist/renderers/index.js +27 -157
  21. package/dist/viewer/createViewer.js +86 -3
  22. package/package.json +17 -44
  23. package/dist/renderers/archive.d.ts +0 -2
  24. package/dist/renderers/archive.js +0 -547
  25. package/dist/renderers/archiveCache.d.ts +0 -10
  26. package/dist/renderers/archiveCache.js +0 -96
  27. package/dist/renderers/archiveFallback.d.ts +0 -7
  28. package/dist/renderers/archiveFallback.js +0 -166
  29. package/dist/renderers/archiveShared.d.ts +0 -23
  30. package/dist/renderers/archiveShared.js +0 -71
  31. package/dist/renderers/audio.d.ts +0 -8
  32. package/dist/renderers/audio.js +0 -219
  33. package/dist/renderers/cad.d.ts +0 -2
  34. package/dist/renderers/cad.js +0 -446
  35. package/dist/renderers/code.d.ts +0 -11
  36. package/dist/renderers/code.js +0 -233
  37. package/dist/renderers/data.d.ts +0 -7
  38. package/dist/renderers/data.js +0 -370
  39. package/dist/renderers/drawing.d.ts +0 -10
  40. package/dist/renderers/drawing.js +0 -882
  41. package/dist/renderers/eda.d.ts +0 -2
  42. package/dist/renderers/eda.js +0 -434
  43. package/dist/renderers/edaParser.d.ts +0 -77
  44. package/dist/renderers/edaParser.js +0 -569
  45. package/dist/renderers/email.d.ts +0 -2
  46. package/dist/renderers/email.js +0 -463
  47. package/dist/renderers/epub.d.ts +0 -2
  48. package/dist/renderers/epub.js +0 -331
  49. package/dist/renderers/geo.d.ts +0 -2
  50. package/dist/renderers/geo.js +0 -284
  51. package/dist/renderers/markdown.d.ts +0 -2
  52. package/dist/renderers/markdown.js +0 -83
  53. package/dist/renderers/model.d.ts +0 -2
  54. package/dist/renderers/model.js +0 -567
  55. package/dist/renderers/ofd.d.ts +0 -2
  56. package/dist/renderers/ofd.js +0 -256
  57. package/dist/renderers/openDocument.d.ts +0 -2
  58. package/dist/renderers/openDocument.js +0 -122
  59. package/dist/renderers/pdf.d.ts +0 -3
  60. package/dist/renderers/pdf.js +0 -1001
  61. package/dist/renderers/pdfStyles.d.ts +0 -1
  62. package/dist/renderers/pdfStyles.js +0 -1
  63. package/dist/renderers/pptx.d.ts +0 -2
  64. package/dist/renderers/pptx.js +0 -217
  65. package/dist/renderers/spreadsheet/state.d.ts +0 -80
  66. package/dist/renderers/spreadsheet/state.js +0 -96
  67. package/dist/renderers/spreadsheet/view.d.ts +0 -25
  68. package/dist/renderers/spreadsheet/view.js +0 -833
  69. package/dist/renderers/spreadsheet/worker/index.d.ts +0 -2
  70. package/dist/renderers/spreadsheet/worker/index.js +0 -1
  71. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.d.ts +0 -73
  72. package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.js +0 -623
  73. package/dist/renderers/spreadsheet/worker/sheetjs/color.d.ts +0 -2
  74. package/dist/renderers/spreadsheet/worker/sheetjs/color.js +0 -73
  75. package/dist/renderers/spreadsheet/worker/sheetjs/index.d.ts +0 -1
  76. package/dist/renderers/spreadsheet/worker/sheetjs/index.js +0 -1
  77. package/dist/renderers/spreadsheet/worker/sheetjs/parser.d.ts +0 -18
  78. package/dist/renderers/spreadsheet/worker/sheetjs/parser.js +0 -106
  79. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.d.ts +0 -1
  80. package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.js +0 -11
  81. package/dist/renderers/spreadsheet/worker/type.d.ts +0 -57
  82. package/dist/renderers/spreadsheet/worker/type.js +0 -1
  83. package/dist/renderers/spreadsheet.d.ts +0 -3
  84. package/dist/renderers/spreadsheet.js +0 -929
  85. package/dist/renderers/typst.d.ts +0 -8
  86. package/dist/renderers/typst.js +0 -547
  87. package/dist/renderers/umd/parser.d.ts +0 -30
  88. package/dist/renderers/umd/parser.js +0 -408
  89. package/dist/renderers/umd.d.ts +0 -2
  90. package/dist/renderers/umd.js +0 -297
  91. package/dist/renderers/video.d.ts +0 -8
  92. package/dist/renderers/video.js +0 -108
  93. package/dist/renderers/wordDoc.d.ts +0 -5
  94. package/dist/renderers/wordDoc.js +0 -284
  95. package/dist/renderers/wordDocx.d.ts +0 -5
  96. package/dist/renderers/wordDocx.js +0 -985
  97. package/dist/renderers/wordDocx.worker.d.ts +0 -1
  98. package/dist/renderers/wordDocx.worker.js +0 -96
  99. package/vendor/ofd/dltech/jbig2/arithmetic_decoder.js +0 -183
  100. package/vendor/ofd/dltech/jbig2/ccitt.js +0 -1070
  101. package/vendor/ofd/dltech/jbig2/compatibility.js +0 -12
  102. package/vendor/ofd/dltech/jbig2/core_utils.js +0 -180
  103. package/vendor/ofd/dltech/jbig2/is_node.js +0 -27
  104. package/vendor/ofd/dltech/jbig2/jbig2.js +0 -2589
  105. package/vendor/ofd/dltech/jbig2/jbig2_stream.js +0 -81
  106. package/vendor/ofd/dltech/jbig2/primitives.js +0 -387
  107. package/vendor/ofd/dltech/jbig2/stream.js +0 -1348
  108. package/vendor/ofd/dltech/jbig2/util.js +0 -972
  109. package/vendor/ofd/dltech/ofd/ofd.d.ts +0 -11
  110. package/vendor/ofd/dltech/ofd/ofd.js +0 -100
  111. package/vendor/ofd/dltech/ofd/ofd_parser.js +0 -395
  112. package/vendor/ofd/dltech/ofd/ofd_render.js +0 -473
  113. package/vendor/ofd/dltech/ofd/ofd_util.js +0 -350
  114. package/vendor/ofd/dltech/ofd/pipeline.js +0 -26
@@ -1,11 +0,0 @@
1
- export interface ParseOfdOptions {
2
- ofd: File | Blob | ArrayBuffer;
3
- success?: (documents: unknown[]) => void;
4
- fail?: (reason: unknown) => void;
5
- }
6
-
7
- export function parseOfdDocument(options: ParseOfdOptions): void;
8
- export function renderOfd(screenWidth: number, ofdDocument: unknown): HTMLElement[];
9
- export function renderOfdByScale(ofdDocument: unknown): HTMLElement[];
10
- export function setPageScale(scale: number): void;
11
- export function getPageScale(): number;
@@ -1,100 +0,0 @@
1
- /*
2
- * ofd.js - A Javascript class for reading and rendering ofd files
3
- * <https://github.com/DLTech21/ofd.js>
4
- *
5
- * Copyright (c) 2020. DLTech21 All Rights Reserved.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * You may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- *
19
- */
20
-
21
- import {calPageBox, calPageBoxScale, renderPage} from "./ofd_render.js";
22
- import {pipeline} from "./pipeline.js";
23
- import {
24
- getDocRoots,
25
- parseSingleDoc,
26
- unzipOfd
27
- } from "./ofd_parser.js";
28
- import {getPageScal, setPageScal} from "./ofd_util.js";
29
-
30
- export const parseOfdDocument = function (options) {
31
- if (options.ofd instanceof File || options.ofd instanceof Blob || options.ofd instanceof ArrayBuffer) {
32
- doParseOFD(options);
33
- } else {
34
- options.fail?.(new Error('OFD 预览只接收 File、Blob 或 ArrayBuffer 数据'));
35
- }
36
- }
37
-
38
- const doParseOFD = function (options) {
39
- pipeline.call(this, async () => await unzipOfd(options.ofd), getDocRoots, parseSingleDoc)
40
- .then(res => {
41
- if (options.success) {
42
- options.success(res);
43
- }
44
- })
45
- .catch(res => {
46
- console.log(res)
47
- if (options.fail) {
48
- options.fail(res);
49
- }
50
- });
51
- }
52
-
53
- export const renderOfd = function (screenWidth, ofd) {
54
- let divArray = [];
55
- if (!ofd) {
56
- return divArray;
57
- }
58
- for (const page of ofd.pages) {
59
- let box = calPageBox(screenWidth, ofd.document, page);
60
- const pageId = Object.keys(page)[0];
61
- let pageDiv = document.createElement('div');
62
- pageDiv.id = pageId;
63
- pageDiv.setAttribute('style', `margin-bottom: 20px;position: relative;width:${box.w}px;height:${box.h}px;background: white;`)
64
- renderPage(pageDiv, page, ofd.tpls, ofd.fontResObj, ofd.drawParamResObj, ofd.multiMediaResObj);
65
- divArray.push(pageDiv);
66
- }
67
- return divArray;
68
- }
69
-
70
- export const renderOfdByScale = function (ofd) {
71
- let divArray = [];
72
- if (!ofd) {
73
- return divArray;
74
- }
75
- for (const page of ofd.pages) {
76
- let box = calPageBoxScale(ofd.document, page);
77
- const pageId = Object.keys(page)[0];
78
- let pageDiv = document.createElement('div');
79
- pageDiv.id = pageId;
80
- pageDiv.setAttribute('style', `margin-bottom: 20px;position: relative;width:${box.w}px;height:${box.h}px;background: white;`)
81
- renderPage(pageDiv, page, ofd.tpls, ofd.fontResObj, ofd.drawParamResObj, ofd.multiMediaResObj);
82
- divArray.push(pageDiv);
83
- }
84
- return divArray;
85
- }
86
-
87
- export const digestCheck = function (options) {
88
- // 当前预览链路只负责浏览器端展示,不执行签章摘要校验,避免把 ASN.1/国密校验运行时引入异步块。
89
- return options?.arr ? false : false
90
- }
91
-
92
- export const setPageScale = function (scale) {
93
- setPageScal(scale);
94
- }
95
-
96
- export const getPageScale = function () {
97
- return getPageScal();
98
- }
99
-
100
- export { calPageBox, calPageBoxScale, renderPage }
@@ -1,395 +0,0 @@
1
- /*
2
- * ofd.js - A Javascript class for reading and rendering ofd files
3
- * <https://github.com/DLTech21/ofd.js>
4
- *
5
- * Copyright (c) 2020. DLTech21 All Rights Reserved.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * You may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- *
19
- */
20
-
21
- import JsZip from "jszip";
22
- import parser from 'ofd-xml-parser';
23
- import {parseStBox, getExtensionByPath, replaceFirstSlash} from "./ofd_util.js";
24
- import {Jbig2Image} from '../jbig2/jbig2.js';
25
-
26
- const ensureBrowserGlobal = () => {
27
- // ofd-xml-parser 是从 DLTech21/ofd.js 继承下来的 CommonJS 包,内部读取 Node 风格 global。
28
- // 浏览器端把它映射到 globalThis,避免解析 XML 时抛出 global is not defined。
29
- if (!globalThis.global) {
30
- globalThis.global = globalThis;
31
- }
32
- globalThis.xmlParseFlag = 0;
33
- }
34
-
35
- export const unzipOfd = function (file) {
36
- return new Promise((resolve, reject) => {
37
- JsZip.loadAsync(file)
38
- .then(function (zip) {
39
- resolve(zip);
40
- }, function (e) {
41
- reject(e);
42
- });
43
- });
44
- }
45
-
46
- export const getDocRoots = async function (zip) {
47
- const data = await getJsonFromXmlContent(zip, 'OFD.xml');
48
- const docbodys = data['json']['ofd:OFD']['ofd:DocBody'];
49
- let array = [];
50
- array = array.concat(docbodys);
51
- return [zip, array]
52
- }
53
-
54
- export const parseSingleDoc = async function ([zip, array]) {
55
- let docs = [];
56
- for (let docbody of array) {
57
- if (docbody) {
58
- let res = await doGetDocRoot(zip, docbody);
59
- res = await getDocument(res);
60
- res = await getDocumentRes(res);
61
- res = await getPublicRes(res);
62
- res = await getTemplatePage(res);
63
- res = await getPage(res);
64
- docs.push(res);
65
- }
66
- }
67
- return docs;
68
- }
69
-
70
- export const doGetDocRoot = async function (zip, docbody) {
71
- let docRoot = docbody['ofd:DocRoot'];
72
- docRoot = replaceFirstSlash(docRoot);
73
- const doc = docRoot.split('/')[0];
74
- const signatures = docbody['ofd:Signatures'];
75
- const stampAnnot = await getSignature(zip, signatures, doc);
76
- let stampAnnotArray = {};
77
- for (const stamp of stampAnnot) {
78
- if (stamp.sealObj && Object.keys(stamp.sealObj).length > 0) {
79
- if (stamp.sealObj.type === 'ofd') {
80
- const stampObjs = await getSealDocumentObj(stamp);
81
- for (let stampObj of stampObjs) {
82
- stamp.stampAnnot.boundary = parseStBox(stamp.stampAnnot['@_Boundary']);
83
- //console.log(stamp.stampAnnot.boundary)
84
- stamp.stampAnnot.pageRef = stamp.stampAnnot['@_PageRef'];
85
- if (!stampAnnotArray[stamp.stampAnnot['@_PageRef']]) {
86
- stampAnnotArray[stamp.stampAnnot['@_PageRef']] = [];
87
- }
88
- stampAnnotArray[stamp.stampAnnot['@_PageRef']].push({type: 'ofd', obj: stampObj, stamp});
89
- }
90
- } else if (stamp.sealObj.type === 'png') {
91
- let img = 'data:image/png;base64,' + btoa(String.fromCharCode.apply(null, stamp.sealObj.ofdArray));
92
- let stampArray = [];
93
- stampArray = stampArray.concat(stamp.stampAnnot);
94
- for (const annot of stampArray) {
95
- if (annot) {
96
- const stampObj = {img, pageId: annot['@_PageRef'], 'boundary': parseStBox(annot['@_Boundary']), 'clip': parseStBox(annot['@_Clip'])};
97
- if (!stampAnnotArray[annot['@_PageRef']]) {
98
- stampAnnotArray[annot['@_PageRef']] = [];
99
- }
100
- stampAnnotArray[annot['@_PageRef']].push({type: 'png', obj: stampObj, stamp});
101
- }
102
- }
103
- }
104
- }
105
- }
106
- return [zip, doc, docRoot, stampAnnotArray];
107
- }
108
-
109
- export const getDocument = async function ([zip, doc, docRoot, stampAnnot]) {
110
- const data = await getJsonFromXmlContent(zip, docRoot);
111
- const documentObj = data['json']['ofd:Document'];
112
- let annotations = documentObj['ofd:Annotations'];
113
- let array = [];
114
- let annoBase;
115
- if (annotations) {
116
- if (annotations.indexOf('/') !== -1) {
117
- annoBase = annotations.substring(0, annotations.indexOf('/'));
118
- }
119
- if (annotations.indexOf(doc) === -1) {
120
- annotations = `${doc}/${annotations}`;
121
- }
122
- if (zip.files[annotations]) {
123
- annotations = await getJsonFromXmlContent(zip, annotations);
124
- array = array.concat(annotations['json']['ofd:Annotations']['ofd:Page']);
125
- }
126
- }
127
- const annotationObjs = await getAnnotations(annoBase, array, doc, zip)
128
- return [zip, doc, documentObj, stampAnnot, annotationObjs];
129
- }
130
-
131
- const getAnnotations = async function (annoBase, annotations, doc, zip) {
132
- let annotationObjs = {};
133
- for (let anno of annotations) {
134
- if (!anno) {
135
- continue
136
- }
137
- const pageId = anno['@_PageID'];
138
- let fileLoc = anno['ofd:FileLoc'];
139
- fileLoc = replaceFirstSlash(fileLoc);
140
- if (annoBase && fileLoc.indexOf(annoBase) === -1) {
141
- fileLoc = `${annoBase}/${fileLoc}`;
142
- }
143
- if (fileLoc.indexOf(doc) === -1) {
144
- fileLoc = `${doc}/${fileLoc}`;
145
- }
146
-
147
- if (zip.files[fileLoc]) {
148
- const data = await getJsonFromXmlContent(zip, fileLoc);
149
-
150
- let array = [];
151
- array = array.concat(data['json']['ofd:PageAnnot']['ofd:Annot']);
152
- if (!annotationObjs[pageId]) {
153
- annotationObjs[pageId] = [];
154
- }
155
- for (let annot of array) {
156
- if (!annot) {
157
- continue
158
- }
159
- const type = annot['@_Type'];
160
- const visible = annot['@_Visible'] ? annot['@_Visible']:true;
161
- const appearance = annot['ofd:Appearance'];
162
- let appearanceObj = {type, appearance, visible};
163
- annotationObjs[pageId].push(appearanceObj);
164
- }
165
- }
166
- }
167
- return annotationObjs;
168
- }
169
-
170
- export const getDocumentRes = async function ([zip, doc, Document, stampAnnot, annotationObjs]) {
171
- let documentResPath = Document['ofd:CommonData']['ofd:DocumentRes'];
172
- let fontResObj = {};
173
- let drawParamResObj = {};
174
- let multiMediaResObj = {};
175
- if (documentResPath) {
176
- if (documentResPath.indexOf(doc) == -1) {
177
- documentResPath = `${doc}/${documentResPath}`;
178
- }
179
- if (zip.files[documentResPath]) {
180
- const data = await getJsonFromXmlContent(zip, documentResPath);
181
- const documentResObj = data['json']['ofd:Res'];
182
- fontResObj = await getFont(documentResObj);
183
- drawParamResObj = await getDrawParam(documentResObj);
184
- multiMediaResObj = await getMultiMediaRes(zip, documentResObj, doc);
185
- }
186
- }
187
- return [zip, doc, Document, stampAnnot, annotationObjs, fontResObj, drawParamResObj, multiMediaResObj];
188
- }
189
-
190
- export const getPublicRes = async function ([zip, doc, Document, stampAnnot, annotationObjs, fontResObj, drawParamResObj, multiMediaResObj]) {
191
- let publicResPath = Document['ofd:CommonData']['ofd:PublicRes'];
192
- if (publicResPath) {
193
- if (publicResPath.indexOf(doc) == -1) {
194
- publicResPath = `${doc}/${publicResPath}`;
195
- }
196
- if (zip.files[publicResPath]) {
197
- const data = await getJsonFromXmlContent(zip, publicResPath);
198
- const publicResObj = data['json']['ofd:Res'];
199
- let fontObj = await getFont(publicResObj);
200
- fontResObj = Object.assign(fontResObj, fontObj);
201
- let drawParamObj = await getDrawParam(publicResObj);
202
- drawParamResObj = Object.assign(drawParamResObj, drawParamObj);
203
- let multiMediaObj = await getMultiMediaRes(zip, publicResObj, doc);
204
- multiMediaResObj = Object.assign(multiMediaResObj, multiMediaObj);
205
- }
206
- }
207
- return [zip, doc, Document, stampAnnot, annotationObjs, fontResObj, drawParamResObj, multiMediaResObj];
208
- }
209
-
210
- export const getTemplatePage = async function ([zip, doc, Document, stampAnnot, annotationObjs, fontResObj, drawParamResObj, multiMediaResObj]) {
211
- let templatePages = Document['ofd:CommonData']['ofd:TemplatePage'];
212
- let array = [];
213
- array = array.concat(templatePages);
214
- let tpls = {};
215
- for (const templatePage of array) {
216
- if (templatePage) {
217
- let pageObj = await parsePage(zip, templatePage, doc);
218
- tpls[Object.keys(pageObj)[0]] = pageObj[Object.keys(pageObj)[0]];
219
- }
220
- }
221
- return [zip, doc, Document, stampAnnot, annotationObjs, tpls, fontResObj, drawParamResObj, multiMediaResObj];
222
- }
223
-
224
- export const getPage = async function ([zip, doc, Document, stampAnnot, annotationObjs, tpls, fontResObj, drawParamResObj, multiMediaResObj]) {
225
- let pages = Document['ofd:Pages']['ofd:Page'];
226
- let array = [];
227
- array = array.concat(pages);
228
- let res = [];
229
- for (const page of array) {
230
- if (page) {
231
- let pageObj = await parsePage(zip, page, doc);
232
- const pageId = Object.keys(pageObj)[0];
233
- const currentPageStamp = stampAnnot[pageId];
234
- if (currentPageStamp) {
235
- pageObj[pageId].stamp = currentPageStamp;
236
- }
237
- const annotationObj = annotationObjs[pageId];
238
- if (annotationObj) {
239
- pageObj[pageId].annotation = annotationObj;
240
- }
241
- res.push(pageObj);
242
- }
243
- }
244
- return {
245
- 'doc': doc,
246
- 'document': Document,
247
- 'pages': res,
248
- 'tpls': tpls,
249
- 'stampAnnot': stampAnnot,
250
- fontResObj,
251
- drawParamResObj,
252
- multiMediaResObj
253
- };
254
- }
255
-
256
- const getFont = async function (res) {
257
- const fonts = res['ofd:Fonts'];
258
- let fontResObj = {};
259
- if (fonts) {
260
- let fontArray = [];
261
- fontArray = fontArray.concat(fonts['ofd:Font']);
262
- for (const font of fontArray) {
263
- if (font) {
264
- if (font['@_FamilyName']) {
265
- fontResObj[font['@_ID']] = font['@_FamilyName'];
266
- } else {
267
- fontResObj[font['@_ID']] = font['@_FontName'];
268
- }
269
- }
270
- }
271
- }
272
- return fontResObj;
273
- }
274
-
275
- const getDrawParam = async function (res) {
276
- const drawParams = res['ofd:DrawParams'];
277
- let drawParamResObj = {};
278
- if (drawParams) {
279
- let array = [];
280
- array = array.concat(drawParams['ofd:DrawParam']);
281
- for (const item of array) {
282
- if (item) {
283
- drawParamResObj[item['@_ID']] = {
284
- 'LineWidth': item['@_LineWidth'],
285
- 'FillColor': item['ofd:FillColor'] ? item['ofd:FillColor']['@_Value'] : '',
286
- 'StrokeColor': item['ofd:StrokeColor'] ? item['ofd:StrokeColor']['@_Value'] : "",
287
- 'relative': item['@_Relative'],
288
- };
289
- }
290
- }
291
- }
292
- return drawParamResObj;
293
- }
294
-
295
- const getMultiMediaRes = async function (zip, res, doc) {
296
- const multiMedias = res['ofd:MultiMedias'];
297
- let multiMediaResObj = {};
298
- if (multiMedias) {
299
- let array = [];
300
- array = array.concat(multiMedias['ofd:MultiMedia']);
301
- for (const item of array) {
302
- if (item) {
303
- let file = item['ofd:MediaFile'];
304
- if (res['@_BaseLoc']) {
305
- if (file.indexOf(res['@_BaseLoc']) === -1) {
306
- file = `${res['@_BaseLoc']}/${file}`
307
- }
308
- }
309
- if (file.indexOf(doc) === -1) {
310
- file = `${doc}/${file}`
311
- }
312
- if (item['@_Type'].toLowerCase() === 'image') {
313
- const format = item['@_Format'];
314
- const ext = getExtensionByPath(file);
315
- if ((format && (format.toLowerCase() === 'gbig2' || format.toLowerCase() === 'jb2')) || ext && (ext.toLowerCase() === 'jb2' || ext.toLowerCase() === 'gbig2')) {
316
- const jbig2 = await parseJbig2ImageFromZip(zip, file);
317
- multiMediaResObj[item['@_ID']] = jbig2;
318
- } else {
319
- const img = await parseOtherImageFromZip(zip, file);
320
- multiMediaResObj[item['@_ID']] = {img, 'format': 'png'};
321
- }
322
- } else {
323
- multiMediaResObj[item['@_ID']] = file;
324
- }
325
- }
326
- }
327
- }
328
- return multiMediaResObj;
329
- }
330
-
331
- const parsePage = async function (zip, obj, doc) {
332
- let pagePath = obj['@_BaseLoc'];
333
- if (pagePath.indexOf(doc) == -1) {
334
- pagePath = `${doc}/${pagePath}`;
335
- }
336
- const data = await getJsonFromXmlContent(zip, pagePath);
337
- let pageObj = {};
338
- pageObj[obj['@_ID']] = {'json': data['json']['ofd:Page'], 'xml': data['xml']};
339
- return pageObj;
340
- }
341
-
342
- const getSignature = async function (zip, signatures, doc) {
343
- // 签章解析依赖 ASN.1、国密算法和证书校验链路。在线预览先跳过签章校验,
344
- // 以免个别签章解析失败阻断正文页渲染;业务如需验签可在服务端独立处理。
345
- void zip;
346
- void signatures;
347
- void doc;
348
- return [];
349
- }
350
-
351
- const getSealDocumentObj = function () {
352
- return Promise.resolve([]);
353
- }
354
-
355
- const getJsonFromXmlContent = async function (zip, xmlName) {
356
- return new Promise((resolve, reject) => {
357
- zip.files[xmlName].async('string').then(function (content) {
358
- ensureBrowserGlobal();
359
- let ops = {
360
- attributeNamePrefix: "@_",
361
- ignoreAttributes: false,
362
- parseNodeValue: false,
363
- trimValues: false
364
- };
365
- let jsonObj = parser.parse(content, ops);
366
- let result = {'xml': content, 'json': jsonObj};
367
- resolve(result);
368
- }, function error(e) {
369
- reject(e);
370
- })
371
- });
372
- }
373
-
374
- const parseJbig2ImageFromZip = async function (zip, name) {
375
- return new Promise((resolve, reject) => {
376
- zip.files[name].async('uint8array').then(function (bytes) {
377
- let jbig2 = new Jbig2Image();
378
- const img = jbig2.parse(bytes);
379
- resolve({img, width: jbig2.width, height: jbig2.height, format: 'gbig2'});
380
- }, function error(e) {
381
- reject(e);
382
- })
383
- });
384
- }
385
-
386
- const parseOtherImageFromZip = async function (zip, name) {
387
- return new Promise((resolve, reject) => {
388
- zip.files[name].async('base64').then(function (bytes) {
389
- const img = 'data:image/png;base64,' + bytes;
390
- resolve(img);
391
- }, function error(e) {
392
- reject(e);
393
- })
394
- });
395
- }