@syzlm/ofdparser 0.0.1

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 (213) hide show
  1. package/.babelrc +14 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.json +18 -0
  4. package/.prettierrc.json +9 -0
  5. package/dist/OFD.d.ts +8 -0
  6. package/dist/Pages.d.ts +7 -0
  7. package/dist/RootDocumnet.d.ts +1 -0
  8. package/dist/bundle.cjs.js +64123 -0
  9. package/dist/bundle.esm.js +64115 -0
  10. package/dist/bundle.iife.js +14743 -0
  11. package/dist/bundle.umd.js +64045 -0
  12. package/dist/constant/index.d.ts +7 -0
  13. package/dist/constant.d.ts +6 -0
  14. package/dist/core/ofd-core/Annotations/AnnotationsXml.d.ts +16 -0
  15. package/dist/core/ofd-core/Asn.1Utils.d.ts +47 -0
  16. package/dist/core/ofd-core/Documents/DocumentResXml.d.ts +15 -0
  17. package/dist/core/ofd-core/Documents/DocumnetXml.d.ts +25 -0
  18. package/dist/core/ofd-core/Documents/PublicResXml.d.ts +15 -0
  19. package/dist/core/ofd-core/OFDElement.d.ts +232 -0
  20. package/dist/core/ofd-core/Ofd/OFDXml.d.ts +19 -0
  21. package/dist/core/ofd-core/Pages/PageXml.d.ts +20 -0
  22. package/dist/core/ofd-core/Signatures/Signatures.d.ts +20 -0
  23. package/dist/core/ofd-core/TemplatePages/TemplatePages.d.ts +20 -0
  24. package/dist/core/ofd-core/constant.d.ts +29 -0
  25. package/dist/core/ofd-core/utils.d.ts +21 -0
  26. package/dist/dicom/dicom.d.ts +15 -0
  27. package/dist/dicom/index.d.ts +1 -0
  28. package/dist/errors/ErrorHandle.d.ts +6 -0
  29. package/dist/errors/ErrorMsg.d.ts +16 -0
  30. package/dist/errors/FetchErrors.d.ts +4 -0
  31. package/dist/errors/MimeError.d.ts +4 -0
  32. package/dist/errors/OFDErrors.d.ts +4 -0
  33. package/dist/errors/UnzipErrors.d.ts +4 -0
  34. package/dist/errors/XmlErrors.d.ts +4 -0
  35. package/dist/errors/error-msg.d.ts +9 -0
  36. package/dist/es.d.ts +2 -0
  37. package/dist/index.d.ts +6 -0
  38. package/dist/lib/ParseFile.d.ts +7 -0
  39. package/dist/lib/UnitCoversion.d.ts +31 -0
  40. package/dist/lib/asn1/Asn.1.d.ts +34 -0
  41. package/dist/lib/asn1/Stream.d.ts +27 -0
  42. package/dist/lib/asn1/asn1.d.ts +4 -0
  43. package/dist/lib/asn1/base64.d.ts +4 -0
  44. package/dist/lib/asn1/hex.d.ts +5 -0
  45. package/dist/lib/asn1/index.d.ts +5 -0
  46. package/dist/lib/asn1/int10.d.ts +34 -0
  47. package/dist/lib/asn1/oids.d.ts +2 -0
  48. package/dist/lib/asn1/string-cut.d.ts +2 -0
  49. package/dist/lib/decode-html.d.ts +7 -0
  50. package/dist/lib/fetch.d.ts +17 -0
  51. package/dist/lib/is-element.d.ts +5 -0
  52. package/dist/lib/load-files.d.ts +3 -0
  53. package/dist/lib/load-opentype.d.ts +34 -0
  54. package/dist/lib/load-script.d.ts +1 -0
  55. package/dist/lib/mime.d.ts +8 -0
  56. package/dist/lib/read-buffer.d.ts +2 -0
  57. package/dist/lib/toFixeds.d.ts +7 -0
  58. package/dist/libs/Asn.1Utils.d.ts +47 -0
  59. package/dist/libs/asn1/Asn.1.d.ts +34 -0
  60. package/dist/libs/asn1/Stream.d.ts +27 -0
  61. package/dist/libs/asn1/asn1.d.ts +4 -0
  62. package/dist/libs/asn1/base64.d.ts +4 -0
  63. package/dist/libs/asn1/hex.d.ts +5 -0
  64. package/dist/libs/asn1/index.d.ts +5 -0
  65. package/dist/libs/asn1/int10.d.ts +34 -0
  66. package/dist/libs/asn1/oids.d.ts +2 -0
  67. package/dist/libs/asn1/string-cut.d.ts +2 -0
  68. package/dist/libs/decode-html.d.ts +7 -0
  69. package/dist/libs/fetch.d.ts +17 -0
  70. package/dist/libs/mime.d.ts +8 -0
  71. package/dist/libs/ofdArray.d.ts +10 -0
  72. package/dist/libs/ofdImageObject.d.ts +9 -0
  73. package/dist/libs/ofdLayer.d.ts +3 -0
  74. package/dist/libs/ofdName.d.ts +17 -0
  75. package/dist/libs/ofdPathObject.d.ts +11 -0
  76. package/dist/libs/ofdTextObject.d.ts +6 -0
  77. package/dist/libs/parseAnnotation.d.ts +5 -0
  78. package/dist/libs/parseColor.d.ts +5 -0
  79. package/dist/libs/parsePageArea.d.ts +17 -0
  80. package/dist/libs/parser-elements.d.ts +8 -0
  81. package/dist/libs/parserElements.d.ts +8 -0
  82. package/dist/libs/pipeExtensions.d.ts +4 -0
  83. package/dist/libs/read-buffer.d.ts +2 -0
  84. package/dist/main.d.ts +15 -0
  85. package/dist/ofd/ConverterDpi.d.ts +16 -0
  86. package/dist/ofd/index.d.ts +1 -0
  87. package/dist/ofd/ofd-utils.d.ts +137 -0
  88. package/dist/ofd/ofd.d.ts +35 -0
  89. package/dist/ofd/parse-ofd.d.ts +18 -0
  90. package/dist/ofd/render.d.ts +18 -0
  91. package/dist/ofd/svg-image.d.ts +12 -0
  92. package/dist/ofd/svg-path.d.ts +5 -0
  93. package/dist/ofd/svg-text.d.ts +8 -0
  94. package/dist/ofd.parse.d.ts +6 -0
  95. package/dist/ofd.xml.d.ts +1 -0
  96. package/dist/ofdParse.d.ts +6 -0
  97. package/dist/pipe/annotations.d.ts +13 -0
  98. package/dist/pipe/attachments.d.ts +13 -0
  99. package/dist/pipe/commonData.d.ts +18 -0
  100. package/dist/pipe/customTags.d.ts +14 -0
  101. package/dist/pipe/extensions.d.ts +14 -0
  102. package/dist/pipe/output.d.ts +7 -0
  103. package/dist/pipe/pages.d.ts +13 -0
  104. package/dist/pipe/permissions.d.ts +14 -0
  105. package/dist/pipe/pipeline.d.ts +63 -0
  106. package/dist/pipe/startPipe.d.ts +11 -0
  107. package/dist/xml/index.d.ts +2 -0
  108. package/dist/xml/render.d.ts +6 -0
  109. package/dist/xml/xml.d.ts +18 -0
  110. package/package.json +47 -0
  111. package/public/index.html +75 -0
  112. package/public/opentype.min.js +2 -0
  113. package/rollup.config.dev.mjs +47 -0
  114. package/rollup.config.mjs +70 -0
  115. package/src/constant/index.ts +13 -0
  116. package/src/core/ofd-core/Annotations/Annotation.km +206 -0
  117. package/src/core/ofd-core/Annotations/Annotations.km +59 -0
  118. package/src/core/ofd-core/Annotations/Annotations.md +13 -0
  119. package/src/core/ofd-core/Annotations/AnnotationsXml.ts +114 -0
  120. package/src/core/ofd-core/Asn.1Utils.ts +225 -0
  121. package/src/core/ofd-core/Documents/DocumentResXml.ts +55 -0
  122. package/src/core/ofd-core/Documents/Documnet.km +862 -0
  123. package/src/core/ofd-core/Documents/DocumnetXml.ts +118 -0
  124. package/src/core/ofd-core/Documents/Documnets.md +296 -0
  125. package/src/core/ofd-core/Documents/PublicResXml.ts +63 -0
  126. package/src/core/ofd-core/Documents//345/233/276/345/261/202/346/270/262/346/237/223/351/241/272/345/272/217.png +0 -0
  127. package/src/core/ofd-core/Documents//350/241/25022/347/272/277/346/235/241/350/277/236/346/216/245/346/240/267/345/274/217.png +0 -0
  128. package/src/core/ofd-core/Documents//350/241/25023/347/272/277/346/235/241/350/231/232/347/272/277/346/240/267/345/274/217.png +0 -0
  129. package/src/core/ofd-core/Documents//350/241/25023/347/273/223/345/220/210/347/202/271/351/225/277/345/272/246.png +0 -0
  130. package/src/core/ofd-core/Documents//350/241/25024/347/272/277/346/235/241/347/253/257/347/202/271/346/240/267/345/274/217.png +0 -0
  131. package/src/core/ofd-core/Documents//351/241/265/350/276/271/347/225/214/345/261/202/346/254/241/347/273/223/346/236/204.png +0 -0
  132. package/src/core/ofd-core/OFDElement.ts +724 -0
  133. package/src/core/ofd-core/Ofd/CT_DocInfo.km +197 -0
  134. package/src/core/ofd-core/Ofd/OFD.km +114 -0
  135. package/src/core/ofd-core/Ofd/OFD.md +99 -0
  136. package/src/core/ofd-core/Ofd/OFDXml.ts +69 -0
  137. package/src/core/ofd-core/Pages/PAGE.md +40 -0
  138. package/src/core/ofd-core/Pages/PageXml.ts +59 -0
  139. package/src/core/ofd-core/Signatures/Signature.km +308 -0
  140. package/src/core/ofd-core/Signatures/Signature.md +21 -0
  141. package/src/core/ofd-core/Signatures/Signatures.km +315 -0
  142. package/src/core/ofd-core/Signatures/Signatures.md +24 -0
  143. package/src/core/ofd-core/Signatures/Signatures.ts +247 -0
  144. package/src/core/ofd-core/TemplatePages/TemplatePages.ts +56 -0
  145. package/src/core/ofd-core/asn.md +60 -0
  146. package/src/core/ofd-core/constant.ts +35 -0
  147. package/src/core/ofd-core/index.d.ts +867 -0
  148. package/src/core/ofd-core/utils.ts +86 -0
  149. package/src/dicom/dicom.ts +42 -0
  150. package/src/dicom/index.ts +1 -0
  151. package/src/errors/ErrorHandle.ts +14 -0
  152. package/src/errors/FetchErrors.ts +8 -0
  153. package/src/errors/MimeError.ts +9 -0
  154. package/src/errors/OFDErrors.ts +11 -0
  155. package/src/errors/UnzipErrors.ts +9 -0
  156. package/src/errors/XmlErrors.ts +11 -0
  157. package/src/errors/error-msg.ts +17 -0
  158. package/src/es.ts +3 -0
  159. package/src/global.d.ts +7 -0
  160. package/src/index.ts +7 -0
  161. package/src/lib/ParseFile.ts +12 -0
  162. package/src/lib/README.md +69 -0
  163. package/src/lib/UnitCoversion.ts +55 -0
  164. package/src/lib/asn1/Asn.1.ts +284 -0
  165. package/src/lib/asn1/README.md +1 -0
  166. package/src/lib/asn1/Stream.ts +314 -0
  167. package/src/lib/asn1/asn1.ts +120 -0
  168. package/src/lib/asn1/base64.ts +97 -0
  169. package/src/lib/asn1/hex.ts +60 -0
  170. package/src/lib/asn1/index.ts +5 -0
  171. package/src/lib/asn1/int10.ts +103 -0
  172. package/src/lib/asn1/oids.ts +6164 -0
  173. package/src/lib/asn1/string-cut.ts +8 -0
  174. package/src/lib/decode-html.ts +37 -0
  175. package/src/lib/fetch.ts +70 -0
  176. package/src/lib/is-element.ts +13 -0
  177. package/src/lib/jbig/README.md +1 -0
  178. package/src/lib/jbig/arithmetic_decoder.js +184 -0
  179. package/src/lib/jbig/base_stream.js +117 -0
  180. package/src/lib/jbig/ccitt.js +1068 -0
  181. package/src/lib/jbig/ccitt_stream.js +60 -0
  182. package/src/lib/jbig/compatibility.js +108 -0
  183. package/src/lib/jbig/core_utils.js +591 -0
  184. package/src/lib/jbig/decode_stream.js +184 -0
  185. package/src/lib/jbig/is_node.js +28 -0
  186. package/src/lib/jbig/jbig2.js +2582 -0
  187. package/src/lib/jbig/jbig2_stream.js +78 -0
  188. package/src/lib/jbig/primitives.js +441 -0
  189. package/src/lib/jbig/stream.js +101 -0
  190. package/src/lib/jbig/util.js +1231 -0
  191. package/src/lib/load-files.ts +26 -0
  192. package/src/lib/load-opentype.ts +161 -0
  193. package/src/lib/load-script.ts +33 -0
  194. package/src/lib/mime.ts +97 -0
  195. package/src/lib/read-buffer.ts +19 -0
  196. package/src/lib/toFixeds.ts +56 -0
  197. package/src/ofd/ConverterDpi.ts +35 -0
  198. package/src/ofd/OFD.md +38 -0
  199. package/src/ofd/TODO.md +10 -0
  200. package/src/ofd/index.ts +1 -0
  201. package/src/ofd/ofd-utils.ts +627 -0
  202. package/src/ofd/ofd.demo.md +12 -0
  203. package/src/ofd/ofd.ts +200 -0
  204. package/src/ofd/ofdxml.km +162 -0
  205. package/src/ofd/parse-ofd.ts +103 -0
  206. package/src/ofd/render.ts +393 -0
  207. package/src/ofd/svg-image.ts +318 -0
  208. package/src/ofd/svg-path.ts +283 -0
  209. package/src/ofd/svg-text.ts +272 -0
  210. package/src/xml/index.ts +3 -0
  211. package/src/xml/render.ts +171 -0
  212. package/src/xml/xml.ts +136 -0
  213. package/tsconfig.json +21 -0
@@ -0,0 +1,26 @@
1
+ import JSZip from 'jszip';
2
+ import UnzipError from '../errors/UnzipErrors';
3
+
4
+ type TypeFile = File | ArrayBuffer;
5
+
6
+ const unzipFile = (file: TypeFile) => {
7
+ return new Promise((resolve, reject) => {
8
+ try {
9
+ if (!file) {
10
+ reject(new UnzipError(404));
11
+ }
12
+ if (file instanceof File) {
13
+ }
14
+ if (file instanceof ArrayBuffer) {
15
+ JSZip.loadAsync(file).then(res => {
16
+ console.log(res);
17
+ });
18
+ }
19
+ resolve('');
20
+ } catch (err) {
21
+ console.error('unzip:', err);
22
+ }
23
+ });
24
+ };
25
+
26
+ export default unzipFile;
@@ -0,0 +1,161 @@
1
+ // import { parse, Font } from 'opentype.js';
2
+
3
+ import loadScript from './load-script';
4
+
5
+ /**
6
+ * @description 加载内置字体
7
+ */
8
+ class FontMap {
9
+ loading: boolean = false;
10
+
11
+ baseLocation: URL | null = null;
12
+
13
+ fontFile: {
14
+ [k: string | number]: {
15
+ getPath: (
16
+ s: string,
17
+ n?: number,
18
+ c?: number,
19
+ v?: number,
20
+ op?: { hinting?: boolean; kerning?: boolean; features?: boolean },
21
+ ) => { glyphs: any; toSVG: (a: number) => string; Path: any };
22
+ };
23
+ } = {};
24
+
25
+ intervalTimer: NodeJS.Timer | null = null;
26
+ callbacks: {
27
+ funs: (l: boolean) => void;
28
+ k: string | number;
29
+ file: ArrayBuffer;
30
+ }[] = [];
31
+
32
+ constructor() {
33
+ this.getBaseUrl();
34
+ }
35
+
36
+ init() {
37
+ if (!window.opentype) {
38
+ this.loading = true;
39
+ // const baseUrl = this.getBaseUrl();
40
+ if (this.baseLocation) {
41
+ loadScript(this.baseLocation.href + 'opentype.js')
42
+ .then(() => {
43
+ this.loading = false;
44
+ })
45
+ .catch(() => {
46
+ // 加载js失败,尝试加载外网
47
+ // cdn方式引入opentype.js
48
+ loadScript('/libs/opentype.min.js')
49
+ .then(() => {
50
+ this.loading = false;
51
+ })
52
+ .catch(() => {
53
+ this.loading = false;
54
+ // 加载js失败,尝试加载本地js
55
+ console.warn('加载字体渲染文件失败');
56
+ //
57
+ });
58
+ //
59
+ });
60
+ } else {
61
+ loadScript('/libs/opentype.min.js')
62
+ .then(() => {
63
+ this.loading = false;
64
+ })
65
+ .catch(() => {
66
+ this.loading = false;
67
+ // 加载js失败,尝试加载本地js
68
+ console.warn('加载字体渲染文件失败');
69
+ //
70
+ });
71
+ }
72
+ } else {
73
+ // callback && callback();
74
+ }
75
+ }
76
+
77
+ getBaseUrl() {
78
+ if (typeof document !== 'undefined' && document.currentScript) {
79
+ // @ts-ignore
80
+ this.baseLocation = new URL('./', document.currentScript.src || '');
81
+ } else {
82
+ // 动态查找js
83
+ const scripts = Array.from(document.getElementsByTagName('script'));
84
+ const currentScript = scripts.find(script => {
85
+ const src = script.getAttribute('src');
86
+ // 根据实际情况调整匹配条件
87
+ return src && src.includes('load-opentype');
88
+ });
89
+
90
+ if (currentScript) {
91
+ const src = currentScript.getAttribute('src');
92
+ this.baseLocation = new URL('./', src || window.location.href);
93
+ } else {
94
+ // 降级方案:使用最后一个 script 标签
95
+ const lastScript = scripts[scripts.length - 1];
96
+ const src = lastScript?.getAttribute('src');
97
+ this.baseLocation = src ? new URL('./', src) : null;
98
+ }
99
+ this.baseLocation = null;
100
+
101
+ console.warn('获取地址失败!');
102
+ }
103
+ }
104
+
105
+ setFontFile(key: string | number, file: ArrayBuffer, callback: (r: boolean) => void) {
106
+ if (!window.opentype) {
107
+ if (this.loading) {
108
+ // 等待 opentype.min.js 加载完成
109
+ if (!this.intervalTimer) {
110
+ this.intervalTimer = setInterval(() => {
111
+ if (!this.loading) {
112
+ if (this.intervalTimer) {
113
+ clearInterval(this.intervalTimer);
114
+ }
115
+ if (this.callbacks.length) {
116
+ this.callbacks.forEach(({ k, funs, file: f }) => {
117
+ try {
118
+ if (!this.fontFile[k]) {
119
+ this.fontFile[k] = window.opentype.parse(f);
120
+ }
121
+ funs(true);
122
+ } catch (er) {
123
+ console.warn(er);
124
+ funs(false);
125
+ }
126
+ });
127
+ }
128
+ }
129
+ }, 30);
130
+ }
131
+ this.callbacks.push({ k: key, file, funs: callback });
132
+ } else {
133
+ this.init();
134
+ }
135
+ return;
136
+ }
137
+ try {
138
+ if (window.opentype && !this.fontFile[key]) {
139
+ this.fontFile[key] = window.opentype.parse(file);
140
+ }
141
+ callback(true);
142
+ } catch (err) {
143
+ console.warn(err);
144
+ callback(false);
145
+ }
146
+ }
147
+
148
+ getFontFile(key: string | number, txt: string, x: number, y: number, s: number): string {
149
+ return this.fontFile[key].getPath(txt, x, y, s, { hinting: true }).toSVG(2);
150
+ }
151
+
152
+ destroy() {
153
+ this.fontFile = {};
154
+ this.callbacks = [];
155
+ if (this.intervalTimer) {
156
+ clearInterval(this.intervalTimer);
157
+ }
158
+ }
159
+ }
160
+
161
+ export default new FontMap();
@@ -0,0 +1,33 @@
1
+ export default function loadScript(url: string): Promise<boolean> {
2
+ return new Promise((resolve, reject) => {
3
+ try {
4
+ const script = document.createElement('script') as HTMLScriptElement & {
5
+ readState: string;
6
+ onreadystatechange: null | (() => void);
7
+ };
8
+ script.type = 'text/javascript';
9
+ if (script.readState) {
10
+ script.onreadystatechange = () => {
11
+ if (
12
+ script.readState === 'loaded' ||
13
+ script.readState === 'complete'
14
+ ) {
15
+ script.onreadystatechange = null;
16
+ resolve(true);
17
+ }
18
+ };
19
+ return;
20
+ }
21
+ script.onload = () => {
22
+ resolve(true);
23
+ };
24
+ script.onerror = err => {
25
+ reject(err);
26
+ };
27
+ script.setAttribute('src', url);
28
+ document.head.appendChild(script);
29
+ } catch (err) {
30
+ reject(err);
31
+ }
32
+ });
33
+ }
@@ -0,0 +1,97 @@
1
+ import VaildMimeError from '../errors/MimeError';
2
+ import readBuffer from './read-buffer';
3
+
4
+ const mimeTypes: { [key: string]: string } = {
5
+ '504B0304': 'zip',
6
+ '504B0506': 'zip',
7
+ '504B0708': 'zip',
8
+ '52617221': 'rar',
9
+
10
+ '89504E47': 'png',
11
+ '25504446': 'pdf',
12
+ '4F676753': 'ogg',
13
+ '75737461': 'tar',
14
+ D0CF11E0: 'msOffice',
15
+ FFD8FFDB: 'jpg',
16
+ FFD8FFE0: 'jpg',
17
+ FFD8FFEE: 'jpeg',
18
+ FFD8FFE1: 'jpeg',
19
+ '47494638': 'gif',
20
+ '52494646': 'wegp',
21
+ '424D663B': 'bmp',
22
+ '3C3F786D': 'xml',
23
+ '3C786272': 'xml',
24
+ '32303232': 'xml'
25
+ };
26
+
27
+ const msOfficeType: { [key: string]: string } = {
28
+ 'application/msword': 'doc',
29
+ 'pplication/vnd.ms-excel': 'xls',
30
+ 'pplication/vnd.mspowerpoint': 'ppt',
31
+ 'pplication/vnd.ms-outlook': 'msg'
32
+ };
33
+
34
+ const zipsFileType: { [key: string]: string } = {
35
+ 'application/ofd': 'ofd',
36
+ 'application/vnd.ofd': 'ofd',
37
+ 'application/docx': 'docx',
38
+ 'application/xlsx': 'xlsx',
39
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
40
+ 'docx',
41
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
42
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
43
+ 'pptx',
44
+ 'application/zip': 'zip',
45
+ 'application/x-zip-ompressed': 'zip'
46
+ };
47
+
48
+ /**
49
+ * 使用arrayBuffer获取文件Magic,转换为文件类型
50
+ * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
51
+ * @link https://datatracker.ietf.org/doc/html/rfc6838
52
+ * @date 2022/7/5 - 09:48:27
53
+ */
54
+ const getFileType = async (file: File): Promise<string> => {
55
+ try {
56
+ if (!file || !(file instanceof File)) {
57
+ throw new VaildMimeError(404);
58
+ }
59
+ const bufferData = await readBuffer(file);
60
+ // uint8Array 转16进制
61
+ const hex16Array = Array.prototype.map.call(new Uint8Array(bufferData), x =>
62
+ ('00' + x.toString(16)).slice(-2)
63
+ );
64
+
65
+ const hex16String = hex16Array.join('').toLocaleUpperCase();
66
+
67
+ const mimeType = mimeTypes[hex16String];
68
+ let { type: fileType } = file;
69
+ if (!fileType && !mimeType) {
70
+ return '';
71
+ }
72
+
73
+ // 同时存在 fileType 以及 mimeType 优先使用mimeType,zip mimeType需要判断,fileType是否是zip类型文件比如:PDF
74
+ if (fileType && mimeType) {
75
+ if (mimeType === 'zip') {
76
+ return zipsFileType[fileType] || fileType.replace(/application\//, '');
77
+ }
78
+ if (mimeType === 'msOffice') {
79
+ return msOfficeType[fileType] || fileType.replace(/application\//, '');
80
+ }
81
+ return mimeType;
82
+ }
83
+ if (!fileType) {
84
+ // 不存在type,截取文件名后缀
85
+ return mimeType;
86
+ }
87
+ if (!mimeType) {
88
+ return fileType;
89
+ }
90
+ } catch (err) {
91
+ console.error(err, 'getFileType error');
92
+ }
93
+
94
+ return '';
95
+ };
96
+
97
+ export default getFileType;
@@ -0,0 +1,19 @@
1
+ import VaildMimeError from '../errors/MimeError';
2
+
3
+ const readBuffer = (file: File, start = 0, end = 4): Promise<ArrayBuffer> =>
4
+ new Promise((resolve, reject) => {
5
+ try {
6
+ const readFile = new FileReader();
7
+ readFile.onload = () => {
8
+ if (readFile.result && readFile.result instanceof ArrayBuffer) {
9
+ resolve(readFile.result);
10
+ }
11
+ };
12
+ readFile.onerror = reject;
13
+ readFile.readAsArrayBuffer(file.slice(start, end));
14
+ } catch (err) {
15
+ reject(new VaildMimeError(500));
16
+ }
17
+ });
18
+
19
+ export default readBuffer;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 精确小数(目标小数位数小于最大精确位数直接返回原值,否则在精确位数+1上四舍五入)
3
+ * @param {Number} num 待精确小数
4
+ * @param {Number} min 最小位数
5
+ * @param {Number} max 最大位数
6
+ */
7
+ export const toFixeds = (num: number | string, min?: number, max?: number): string => {
8
+ const minFix = min || 2;
9
+ const maxFix = max;
10
+ let str = String(num).replace(/^-/, '');
11
+ if (maxFix && maxFix < minFix) {
12
+ return `${num}`;
13
+ }
14
+ const prefixSymbol = String(num).startsWith('-') ? '-' : '';
15
+ const dotIndex = str.indexOf('.');
16
+ if (dotIndex === -1) {
17
+ let dotArr = '.';
18
+ for (let i = 0; i < minFix; i++) {
19
+ dotArr += '0';
20
+ }
21
+ return str + dotArr;
22
+ }
23
+ const maxLen = maxFix || minFix;
24
+ let i = dotIndex + 1;
25
+ let n = '';
26
+ while (n.length < maxLen) {
27
+ n += (str[i++] || '0') + '';
28
+ if (!str[i] && n.length >= minFix) {
29
+ break;
30
+ }
31
+ }
32
+
33
+ const newStr = str.substring(0, dotIndex) + '.' + n;
34
+ let step = 0; //四舍五入进位
35
+ if (i < str.length) {
36
+ step = Number(str[i]) >= 5 ? 1 : 0;
37
+ }
38
+ const nums = newStr.split('');
39
+ const numberNums = nums.map(item => (item === '.' ? '.' : Number(item)));
40
+ if (step > 0) {
41
+ while (i > 0) {
42
+ i--;
43
+ if (numberNums[i] === '.') {
44
+ continue;
45
+ }
46
+ const sum = Number(numberNums[i]) + Number(step);
47
+ numberNums[i] = sum % 10;
48
+ step = sum >= 10 ? 1 : 0;
49
+ if (i === 0 && Number(numberNums[i]) === 0) {
50
+ numberNums.splice(0, 0, 1);
51
+ }
52
+ if (step === 0) break;
53
+ }
54
+ }
55
+ return `${prefixSymbol}` + numberNums.join('');
56
+ };
@@ -0,0 +1,35 @@
1
+ import UnitCoversion from '../lib/UnitCoversion';
2
+
3
+ class ConverterDpi {
4
+ /**
5
+ * 缩放比例
6
+ * @date 2022/8/23 - 09:26:37
7
+ *
8
+ * @type {number}
9
+ */
10
+ scale: number;
11
+
12
+ initScale: number;
13
+ constructor() {
14
+ this.scale = 1;
15
+ this.initScale = 1;
16
+ }
17
+ setInitScale(n: number) {
18
+ this.initScale = n || 1;
19
+ }
20
+ setScale(n: number, isSeal = false) {
21
+ if (!n) {
22
+ return;
23
+ }
24
+ if (isSeal) {
25
+ this.scale = n * this.initScale;
26
+ } else {
27
+ this.scale = n;
28
+ }
29
+ }
30
+ getScreenPX(millimeter: string | number) {
31
+ return UnitCoversion.CoversionPx(Number(millimeter) * (this.scale || 1));
32
+ }
33
+ }
34
+
35
+ export default new ConverterDpi();
package/src/ofd/OFD.md ADDED
@@ -0,0 +1,38 @@
1
+ # OFD 文档结构说明
2
+
3
+ ## ofd.xml
4
+
5
+ ### ofd.xml 文件主入口属性说明
6
+
7
+ | 名称 | 类型 | 说明 | 备注 |
8
+ | ---------- | ---------- | ----------------------------------------------------------------------------------- | ---- |
9
+ | Version | xs:string | 文件格式版本号,取值为 1.0 | 必填 |
10
+ | DocType | xs:string | 文件格式子集类型,取值为“OFD”表明此文档符合标准,取值为“OFD-A”表明符合 OFD 存档规范 |
11
+ | DocBody | | 文件对象入口,可以存在多个。以便在一个文档中存在多个版式文档 | 必选 |
12
+ | DocInfo | CT_DocInfo | 文档元数据信息描述,文档元数据信息描述如[文档元数据属性描述](#文档元数据属性描述) | 必选 |
13
+ | DocRoot | ST_Loc | 指向文档根节点文档, | 可选 |
14
+ | Versions | | 包含多个版本描述节点,用于定义文件因注释或修改产生的版本信息 | 可选 |
15
+ | Singnature | ST_Loc | 指向给文档中签名和签章结构 | 可选 |
16
+
17
+ ### 文档元数据属性描述
18
+
19
+ | 名称 | 类型 | 说明 | 备注 |
20
+ | -------------- | --------- | ------------------------------------------------------------------------------------------------------------ | ---- |
21
+ | DocID | xs:string | 采用 UUID 算法生成的由 32 位字符组成文件标识,每个 DocId 在文档创建或生产的时候分配 | 可选 |
22
+ | Title | xs:string | 文档标题,标题可与文件名不同 | 可选 |
23
+ | Author | xs:string | 文档作者 | 可选 |
24
+ | Subject | xs:string | 文档主题 | 可选 |
25
+ | Abstract | xs:string | 文档摘要和注释 | 可选 |
26
+ | CreationDate | xs:string | 文档创建日期 | 可选 |
27
+ | ModDate | xs:string | 文档最近修改日期 | 可选 |
28
+ | DocUsage | xs:string | 文档分类,可取值(Normal—普通电子文档(default);Ebook—电子书;ENewsPaper—电子报纸;EMagzine—电子期刊杂志) | 可选 |
29
+ | Cover | ST_Loc | 文档封面,此路径指向一个图片文件 | 可选 |
30
+ | keywords | | 关键词集合,每一个关键词用一个 Keyword 子节点表示 | 可选 |
31
+ | Keyword | xs:string | 关键词 | 必选 |
32
+ | Creator | xs:string | 创建文档应用程序 | 可选 |
33
+ | CreatorVersion | xs:string | 创建文档应用程序版本 | 可选 |
34
+ | CustomDatas | | 用户自定义元数据集合,其子节点为 CustomData | 可选 |
35
+ | CustomData | xs:string | 用户自定义元数据,可以指定一个名称和对应的值 | 必选 |
36
+ | Name | xs:string | 用户自定义元数据名称 | 必选 |
37
+
38
+ ### 文档根节点
@@ -0,0 +1,10 @@
1
+ # 第一步 解析 OFD.xml
2
+ # 第二部 解析 DocumnetRes.xml
3
+ # 第三部 解析 Documnet.xml
4
+ # 第四步 解析 Annotations.xml
5
+ # 第五步 解析 Annotation.xml
6
+
7
+ # 将 xml 文件转换成平级数组,方便获取 text 内容
8
+
9
+ # 区分 Document Page Signs DocumentRes Annotation Attachs Content_0
10
+
@@ -0,0 +1 @@
1
+ export { default, getSVGDoms } from './ofd';