@hailin-zheng/editor-core 1.0.18 → 1.0.20

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 (291) hide show
  1. package/lib/doc-ruler.d.ts +1 -0
  2. package/lib/doc-ruler.d.ts.map +1 -0
  3. package/lib/framework/common-util.d.ts +1 -0
  4. package/lib/framework/common-util.d.ts.map +1 -0
  5. package/lib/framework/document-change.d.ts +1 -0
  6. package/lib/framework/document-change.d.ts.map +1 -0
  7. package/lib/framework/document-combine.d.ts +1 -0
  8. package/lib/framework/document-combine.d.ts.map +1 -0
  9. package/lib/framework/document-comment.d.ts +1 -0
  10. package/lib/framework/document-comment.d.ts.map +1 -0
  11. package/lib/framework/document-context.d.ts +1 -0
  12. package/lib/framework/document-context.d.ts.map +1 -0
  13. package/lib/framework/document-eval-func.d.ts +1 -0
  14. package/lib/framework/document-eval-func.d.ts.map +1 -0
  15. package/lib/framework/document-event.d.ts +1 -0
  16. package/lib/framework/document-event.d.ts.map +1 -0
  17. package/lib/framework/document-history.d.ts +1 -0
  18. package/lib/framework/document-history.d.ts.map +1 -0
  19. package/lib/framework/document-images-loader.d.ts +1 -0
  20. package/lib/framework/document-images-loader.d.ts.map +1 -0
  21. package/lib/framework/document-input-cursor.d.ts +1 -0
  22. package/lib/framework/document-input-cursor.d.ts.map +1 -0
  23. package/lib/framework/document-paint.d.ts +1 -0
  24. package/lib/framework/document-paint.d.ts.map +1 -0
  25. package/lib/framework/document-print-offscreen.d.ts +1 -0
  26. package/lib/framework/document-print-offscreen.d.ts.map +1 -0
  27. package/lib/framework/document-print.d.ts +1 -0
  28. package/lib/framework/document-print.d.ts.map +1 -0
  29. package/lib/framework/document-segmenter.d.ts +1 -0
  30. package/lib/framework/document-segmenter.d.ts.map +1 -0
  31. package/lib/framework/document-selection.d.ts +1 -0
  32. package/lib/framework/document-selection.d.ts.map +1 -0
  33. package/lib/framework/document-template.d.ts +1 -0
  34. package/lib/framework/document-template.d.ts.map +1 -0
  35. package/lib/framework/document-textline-mode.d.ts +1 -0
  36. package/lib/framework/document-textline-mode.d.ts.map +1 -0
  37. package/lib/framework/element-define.d.ts +1 -0
  38. package/lib/framework/element-define.d.ts.map +1 -0
  39. package/lib/framework/element-event-define.d.ts +1 -0
  40. package/lib/framework/element-event-define.d.ts.map +1 -0
  41. package/lib/framework/element-measure.d.ts +1 -0
  42. package/lib/framework/element-measure.d.ts.map +1 -0
  43. package/lib/framework/element-paint.d.ts +1 -0
  44. package/lib/framework/element-paint.d.ts.map +1 -0
  45. package/lib/framework/element-props.d.ts +2 -1
  46. package/lib/framework/element-props.d.ts.map +1 -0
  47. package/lib/framework/element-reader.d.ts +1 -0
  48. package/lib/framework/element-reader.d.ts.map +1 -0
  49. package/lib/framework/element-render-cut.d.ts +1 -0
  50. package/lib/framework/element-render-cut.d.ts.map +1 -0
  51. package/lib/framework/element-serialize.d.ts +1 -0
  52. package/lib/framework/element-serialize.d.ts.map +1 -0
  53. package/lib/framework/element-util.d.ts +1 -0
  54. package/lib/framework/element-util.d.ts.map +1 -0
  55. package/lib/framework/impl/checkbox/checkbox-impl.d.ts +1 -0
  56. package/lib/framework/impl/checkbox/checkbox-impl.d.ts.map +1 -0
  57. package/lib/framework/impl/comments/comment-content-impl.d.ts +1 -0
  58. package/lib/framework/impl/comments/comment-content-impl.d.ts.map +1 -0
  59. package/lib/framework/impl/comments/comment-element-impl.d.ts +1 -0
  60. package/lib/framework/impl/comments/comment-element-impl.d.ts.map +1 -0
  61. package/lib/framework/impl/comments/comments-container-impl.d.ts +1 -0
  62. package/lib/framework/impl/comments/comments-container-impl.d.ts.map +1 -0
  63. package/lib/framework/impl/comments/comments-util.d.ts +1 -0
  64. package/lib/framework/impl/comments/comments-util.d.ts.map +1 -0
  65. package/lib/framework/impl/comments/validate-msg-impl.d.ts +1 -0
  66. package/lib/framework/impl/comments/validate-msg-impl.d.ts.map +1 -0
  67. package/lib/framework/impl/data-element/data-decorate-impl.d.ts +1 -0
  68. package/lib/framework/impl/data-element/data-decorate-impl.d.ts.map +1 -0
  69. package/lib/framework/impl/data-element/data-element-barcode.d.ts +1 -0
  70. package/lib/framework/impl/data-element/data-element-barcode.d.ts.map +1 -0
  71. package/lib/framework/impl/data-element/data-element-base-impl.d.ts +1 -0
  72. package/lib/framework/impl/data-element/data-element-base-impl.d.ts.map +1 -0
  73. package/lib/framework/impl/data-element/data-element-check-impl.d.ts +1 -0
  74. package/lib/framework/impl/data-element/data-element-check-impl.d.ts.map +1 -0
  75. package/lib/framework/impl/data-element/data-element-date-impl.d.ts +1 -0
  76. package/lib/framework/impl/data-element/data-element-date-impl.d.ts.map +1 -0
  77. package/lib/framework/impl/data-element/data-element-group-impl.d.ts +1 -0
  78. package/lib/framework/impl/data-element/data-element-group-impl.d.ts.map +1 -0
  79. package/lib/framework/impl/data-element/data-element-image-impl.d.ts +1 -0
  80. package/lib/framework/impl/data-element/data-element-image-impl.d.ts.map +1 -0
  81. package/lib/framework/impl/data-element/data-element-list-impl.d.ts +1 -0
  82. package/lib/framework/impl/data-element/data-element-list-impl.d.ts.map +1 -0
  83. package/lib/framework/impl/data-element/data-element-text-impl.d.ts +1 -0
  84. package/lib/framework/impl/data-element/data-element-text-impl.d.ts.map +1 -0
  85. package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +1 -0
  86. package/lib/framework/impl/decorate/fill-null-space-imple.d.ts.map +1 -0
  87. package/lib/framework/impl/document/doc-body-impl.d.ts +1 -0
  88. package/lib/framework/impl/document/doc-body-impl.d.ts.map +1 -0
  89. package/lib/framework/impl/document/doc-body-part-impl.d.ts +1 -0
  90. package/lib/framework/impl/document/doc-body-part-impl.d.ts.map +1 -0
  91. package/lib/framework/impl/document/doc-container-impl.d.ts +1 -0
  92. package/lib/framework/impl/document/doc-container-impl.d.ts.map +1 -0
  93. package/lib/framework/impl/document/doc-footer-impl.d.ts +1 -0
  94. package/lib/framework/impl/document/doc-footer-impl.d.ts.map +1 -0
  95. package/lib/framework/impl/document/doc-header-impl.d.ts +1 -0
  96. package/lib/framework/impl/document/doc-header-impl.d.ts.map +1 -0
  97. package/lib/framework/impl/document/doc-impl.d.ts +1 -0
  98. package/lib/framework/impl/document/doc-impl.d.ts.map +1 -0
  99. package/lib/framework/impl/index.d.ts +37 -0
  100. package/lib/framework/impl/index.d.ts.map +1 -0
  101. package/lib/framework/impl/media-formula/menstrual-history.d.ts +1 -0
  102. package/lib/framework/impl/media-formula/menstrual-history.d.ts.map +1 -0
  103. package/lib/framework/impl/paragraph/p-impl.d.ts +1 -0
  104. package/lib/framework/impl/paragraph/p-impl.d.ts.map +1 -0
  105. package/lib/framework/impl/picture/image-impl.d.ts +1 -0
  106. package/lib/framework/impl/picture/image-impl.d.ts.map +1 -0
  107. package/lib/framework/impl/radio/radio-impl.d.ts +1 -0
  108. package/lib/framework/impl/radio/radio-impl.d.ts.map +1 -0
  109. package/lib/framework/impl/symbol/br-symbol-impl.d.ts +1 -0
  110. package/lib/framework/impl/symbol/br-symbol-impl.d.ts.map +1 -0
  111. package/lib/framework/impl/symbol/p-symbol-impl.d.ts +1 -0
  112. package/lib/framework/impl/symbol/p-symbol-impl.d.ts.map +1 -0
  113. package/lib/framework/impl/table/table-cell-impl.d.ts +1 -0
  114. package/lib/framework/impl/table/table-cell-impl.d.ts.map +1 -0
  115. package/lib/framework/impl/table/table-impl.d.ts +1 -0
  116. package/lib/framework/impl/table/table-impl.d.ts.map +1 -0
  117. package/lib/framework/impl/table/table-row-impl.d.ts +1 -0
  118. package/lib/framework/impl/table/table-row-impl.d.ts.map +1 -0
  119. package/lib/framework/impl/table/table-split-cell-patch.d.ts +1 -0
  120. package/lib/framework/impl/table/table-split-cell-patch.d.ts.map +1 -0
  121. package/lib/framework/impl/table/table-split-cell.d.ts +1 -0
  122. package/lib/framework/impl/table/table-split-cell.d.ts.map +1 -0
  123. package/lib/framework/impl/table/table-util.d.ts +1 -0
  124. package/lib/framework/impl/table/table-util.d.ts.map +1 -0
  125. package/lib/framework/impl/text/text-impl.d.ts +1 -0
  126. package/lib/framework/impl/text/text-impl.d.ts.map +1 -0
  127. package/lib/framework/impl/text/track-run-impl.d.ts +1 -0
  128. package/lib/framework/impl/text/track-run-impl.d.ts.map +1 -0
  129. package/lib/framework/notify.d.ts +1 -0
  130. package/lib/framework/notify.d.ts.map +1 -0
  131. package/lib/framework/range-util.d.ts +1 -0
  132. package/lib/framework/range-util.d.ts.map +1 -0
  133. package/lib/framework/render-context.d.ts +1 -0
  134. package/lib/framework/render-context.d.ts.map +1 -0
  135. package/lib/framework/render-define.d.ts +1 -0
  136. package/lib/framework/render-define.d.ts.map +1 -0
  137. package/lib/framework/selection-overlays.d.ts +1 -0
  138. package/lib/framework/selection-overlays.d.ts.map +1 -0
  139. package/lib/index.d.ts +35 -0
  140. package/lib/index.d.ts.map +1 -0
  141. package/lib/index.js +15671 -0
  142. package/lib/texteditor.d.ts +3 -2
  143. package/lib/texteditor.d.ts.map +1 -0
  144. package/lib/util/subject.d.ts +1 -0
  145. package/lib/util/subject.d.ts.map +1 -0
  146. package/lib/util/table-bind.d.ts +1 -0
  147. package/lib/util/table-bind.d.ts.map +1 -0
  148. package/package.json +32 -23
  149. package/README.md +0 -1613
  150. package/lib/doc-ruler.js +0 -313
  151. package/lib/doc-ruler.js.map +0 -1
  152. package/lib/framework/common-util.js +0 -178
  153. package/lib/framework/common-util.js.map +0 -1
  154. package/lib/framework/document-change.js +0 -1342
  155. package/lib/framework/document-change.js.map +0 -1
  156. package/lib/framework/document-combine.js +0 -40
  157. package/lib/framework/document-combine.js.map +0 -1
  158. package/lib/framework/document-comment.js +0 -148
  159. package/lib/framework/document-comment.js.map +0 -1
  160. package/lib/framework/document-context.js +0 -330
  161. package/lib/framework/document-context.js.map +0 -1
  162. package/lib/framework/document-eval-func.js +0 -48
  163. package/lib/framework/document-eval-func.js.map +0 -1
  164. package/lib/framework/document-event.js +0 -1054
  165. package/lib/framework/document-event.js.map +0 -1
  166. package/lib/framework/document-history.js +0 -65
  167. package/lib/framework/document-history.js.map +0 -1
  168. package/lib/framework/document-images-loader.js +0 -66
  169. package/lib/framework/document-images-loader.js.map +0 -1
  170. package/lib/framework/document-input-cursor.js +0 -239
  171. package/lib/framework/document-input-cursor.js.map +0 -1
  172. package/lib/framework/document-paint.js +0 -103
  173. package/lib/framework/document-paint.js.map +0 -1
  174. package/lib/framework/document-print-offscreen.js +0 -128
  175. package/lib/framework/document-print-offscreen.js.map +0 -1
  176. package/lib/framework/document-print.js +0 -203
  177. package/lib/framework/document-print.js.map +0 -1
  178. package/lib/framework/document-segmenter.js +0 -106
  179. package/lib/framework/document-segmenter.js.map +0 -1
  180. package/lib/framework/document-selection.js +0 -358
  181. package/lib/framework/document-selection.js.map +0 -1
  182. package/lib/framework/document-template.js +0 -20
  183. package/lib/framework/document-template.js.map +0 -1
  184. package/lib/framework/document-textline-mode.js +0 -30
  185. package/lib/framework/document-textline-mode.js.map +0 -1
  186. package/lib/framework/element-define.js +0 -579
  187. package/lib/framework/element-define.js.map +0 -1
  188. package/lib/framework/element-event-define.js +0 -108
  189. package/lib/framework/element-event-define.js.map +0 -1
  190. package/lib/framework/element-measure.js +0 -551
  191. package/lib/framework/element-measure.js.map +0 -1
  192. package/lib/framework/element-paint.js +0 -170
  193. package/lib/framework/element-paint.js.map +0 -1
  194. package/lib/framework/element-props.js +0 -809
  195. package/lib/framework/element-props.js.map +0 -1
  196. package/lib/framework/element-reader.js +0 -151
  197. package/lib/framework/element-reader.js.map +0 -1
  198. package/lib/framework/element-render-cut.js +0 -449
  199. package/lib/framework/element-render-cut.js.map +0 -1
  200. package/lib/framework/element-serialize.js +0 -113
  201. package/lib/framework/element-serialize.js.map +0 -1
  202. package/lib/framework/element-util.js +0 -1463
  203. package/lib/framework/element-util.js.map +0 -1
  204. package/lib/framework/impl/checkbox/checkbox-impl.js +0 -64
  205. package/lib/framework/impl/checkbox/checkbox-impl.js.map +0 -1
  206. package/lib/framework/impl/comments/comment-content-impl.js +0 -105
  207. package/lib/framework/impl/comments/comment-content-impl.js.map +0 -1
  208. package/lib/framework/impl/comments/comment-element-impl.js +0 -62
  209. package/lib/framework/impl/comments/comment-element-impl.js.map +0 -1
  210. package/lib/framework/impl/comments/comments-container-impl.js +0 -62
  211. package/lib/framework/impl/comments/comments-container-impl.js.map +0 -1
  212. package/lib/framework/impl/comments/comments-util.js +0 -67
  213. package/lib/framework/impl/comments/comments-util.js.map +0 -1
  214. package/lib/framework/impl/comments/validate-msg-impl.js +0 -83
  215. package/lib/framework/impl/comments/validate-msg-impl.js.map +0 -1
  216. package/lib/framework/impl/data-element/data-decorate-impl.js +0 -91
  217. package/lib/framework/impl/data-element/data-decorate-impl.js.map +0 -1
  218. package/lib/framework/impl/data-element/data-element-barcode.js +0 -115
  219. package/lib/framework/impl/data-element/data-element-barcode.js.map +0 -1
  220. package/lib/framework/impl/data-element/data-element-base-impl.js +0 -205
  221. package/lib/framework/impl/data-element/data-element-base-impl.js.map +0 -1
  222. package/lib/framework/impl/data-element/data-element-check-impl.js +0 -133
  223. package/lib/framework/impl/data-element/data-element-check-impl.js.map +0 -1
  224. package/lib/framework/impl/data-element/data-element-date-impl.js +0 -111
  225. package/lib/framework/impl/data-element/data-element-date-impl.js.map +0 -1
  226. package/lib/framework/impl/data-element/data-element-group-impl.js +0 -130
  227. package/lib/framework/impl/data-element/data-element-group-impl.js.map +0 -1
  228. package/lib/framework/impl/data-element/data-element-image-impl.js +0 -137
  229. package/lib/framework/impl/data-element/data-element-image-impl.js.map +0 -1
  230. package/lib/framework/impl/data-element/data-element-list-impl.js +0 -131
  231. package/lib/framework/impl/data-element/data-element-list-impl.js.map +0 -1
  232. package/lib/framework/impl/data-element/data-element-text-impl.js +0 -103
  233. package/lib/framework/impl/data-element/data-element-text-impl.js.map +0 -1
  234. package/lib/framework/impl/decorate/fill-null-space-imple.js +0 -43
  235. package/lib/framework/impl/decorate/fill-null-space-imple.js.map +0 -1
  236. package/lib/framework/impl/document/doc-body-impl.js +0 -79
  237. package/lib/framework/impl/document/doc-body-impl.js.map +0 -1
  238. package/lib/framework/impl/document/doc-body-part-impl.js +0 -94
  239. package/lib/framework/impl/document/doc-body-part-impl.js.map +0 -1
  240. package/lib/framework/impl/document/doc-container-impl.js +0 -21
  241. package/lib/framework/impl/document/doc-container-impl.js.map +0 -1
  242. package/lib/framework/impl/document/doc-footer-impl.js +0 -77
  243. package/lib/framework/impl/document/doc-footer-impl.js.map +0 -1
  244. package/lib/framework/impl/document/doc-header-impl.js +0 -83
  245. package/lib/framework/impl/document/doc-header-impl.js.map +0 -1
  246. package/lib/framework/impl/document/doc-impl.js +0 -209
  247. package/lib/framework/impl/document/doc-impl.js.map +0 -1
  248. package/lib/framework/impl/media-formula/menstrual-history.js +0 -153
  249. package/lib/framework/impl/media-formula/menstrual-history.js.map +0 -1
  250. package/lib/framework/impl/paragraph/p-impl.js +0 -156
  251. package/lib/framework/impl/paragraph/p-impl.js.map +0 -1
  252. package/lib/framework/impl/picture/image-impl.js +0 -124
  253. package/lib/framework/impl/picture/image-impl.js.map +0 -1
  254. package/lib/framework/impl/radio/radio-impl.js +0 -72
  255. package/lib/framework/impl/radio/radio-impl.js.map +0 -1
  256. package/lib/framework/impl/symbol/br-symbol-impl.js +0 -54
  257. package/lib/framework/impl/symbol/br-symbol-impl.js.map +0 -1
  258. package/lib/framework/impl/symbol/p-symbol-impl.js +0 -54
  259. package/lib/framework/impl/symbol/p-symbol-impl.js.map +0 -1
  260. package/lib/framework/impl/table/table-cell-impl.js +0 -145
  261. package/lib/framework/impl/table/table-cell-impl.js.map +0 -1
  262. package/lib/framework/impl/table/table-impl.js +0 -363
  263. package/lib/framework/impl/table/table-impl.js.map +0 -1
  264. package/lib/framework/impl/table/table-row-impl.js +0 -75
  265. package/lib/framework/impl/table/table-row-impl.js.map +0 -1
  266. package/lib/framework/impl/table/table-split-cell-patch.js +0 -89
  267. package/lib/framework/impl/table/table-split-cell-patch.js.map +0 -1
  268. package/lib/framework/impl/table/table-split-cell.js +0 -464
  269. package/lib/framework/impl/table/table-split-cell.js.map +0 -1
  270. package/lib/framework/impl/table/table-util.js +0 -678
  271. package/lib/framework/impl/table/table-util.js.map +0 -1
  272. package/lib/framework/impl/text/text-impl.js +0 -149
  273. package/lib/framework/impl/text/text-impl.js.map +0 -1
  274. package/lib/framework/impl/text/track-run-impl.js +0 -112
  275. package/lib/framework/impl/text/track-run-impl.js.map +0 -1
  276. package/lib/framework/notify.js +0 -116
  277. package/lib/framework/notify.js.map +0 -1
  278. package/lib/framework/range-util.js +0 -312
  279. package/lib/framework/range-util.js.map +0 -1
  280. package/lib/framework/render-context.js +0 -384
  281. package/lib/framework/render-context.js.map +0 -1
  282. package/lib/framework/render-define.js +0 -195
  283. package/lib/framework/render-define.js.map +0 -1
  284. package/lib/framework/selection-overlays.js +0 -124
  285. package/lib/framework/selection-overlays.js.map +0 -1
  286. package/lib/texteditor.js +0 -913
  287. package/lib/texteditor.js.map +0 -1
  288. package/lib/util/subject.js +0 -88
  289. package/lib/util/subject.js.map +0 -1
  290. package/lib/util/table-bind.js +0 -6
  291. package/lib/util/table-bind.js.map +0 -1
@@ -1,103 +0,0 @@
1
- import { ElementMeasure } from "./element-measure";
2
- import { ElementPaint } from "./element-paint";
3
- import { ElementRenderCut } from "./element-render-cut";
4
- import { DocumentContainerRender } from "./impl/document/doc-container-impl";
5
- import { ElementUtil } from "./element-util";
6
- import { DocumentSelection } from "./document-selection";
7
- import { RangeUtil } from "./range-util";
8
- import { SelectionOverlays } from "./selection-overlays";
9
- export class DocumentPaint {
10
- viewOptions;
11
- renderContext;
12
- docCtx;
13
- selectedSets;
14
- elementMeasure;
15
- elementRenderCut;
16
- elementPaint;
17
- docPages;
18
- docContainer;
19
- commsContainer;
20
- constructor(viewOptions, renderContext, docCtx, selectedSets) {
21
- this.viewOptions = viewOptions;
22
- this.renderContext = renderContext;
23
- this.docCtx = docCtx;
24
- this.selectedSets = selectedSets;
25
- this.elementMeasure = new ElementMeasure(this.viewOptions, this.renderContext);
26
- this.elementRenderCut = new ElementRenderCut(this.viewOptions, this.renderContext);
27
- this.elementPaint = new ElementPaint(this.viewOptions, this.renderContext);
28
- }
29
- rePages() {
30
- // const destroyItems = [this.docContainer, this.commsContainer];
31
- // destroyItems.forEach(item => item?.destroy())
32
- //Promise.resolve().then(() => { destroyItems.forEach(item => item?.destroy()) });
33
- if (!this.docCtx.document.length) {
34
- return;
35
- }
36
- this.docContainer = new DocumentContainerRender();
37
- this.docCtx.selectionState.renderContainer = this.docContainer;
38
- this.docContainer.rect.width = this.viewOptions.docPageSettings.width;
39
- // console.time('排版计时');
40
- const documentRender = this.elementMeasure.measureDocument(this.docCtx.document);
41
- this.commsContainer = documentRender.getChild(3);
42
- if (this.commsContainer) {
43
- this.commsContainer = this.commsContainer.clone();
44
- }
45
- //console.timeEnd('排版计时');
46
- //console.time('断页计时');
47
- const docPages = this.elementRenderCut.cutPage(documentRender, this.docCtx.document);
48
- //console.timeEnd('断页计时');
49
- this.docContainer.addPages(docPages);
50
- ElementUtil.remeasure(this.docContainer);
51
- this.setCommRangeMark();
52
- this.docPages = docPages;
53
- }
54
- /**
55
- * 获取设置文档容器的总高度
56
- */
57
- getDocumentContainerHeight() {
58
- if (this.docPages.length > 0) {
59
- const lastPage = this.docPages[this.docPages.length - 1];
60
- const lastPageY = lastPage.rect.y + lastPage.rect.height + this.viewOptions.docSpace;
61
- return lastPageY + (this.viewOptions.viewSettings.height * (this.viewOptions.scale - 1));
62
- }
63
- else {
64
- return 0;
65
- }
66
- }
67
- refreshView(rePaint = false) {
68
- //console.time('计时');
69
- this.elementPaint.drawPages(this.docContainer, this.selectedSets, this.commsContainer, rePaint);
70
- //console.timeEnd('计时');
71
- }
72
- getDocPages() {
73
- return this.docPages;
74
- }
75
- getDocContainer() {
76
- return this.docContainer;
77
- }
78
- /***
79
- * 设置审阅区间样式痕迹
80
- */
81
- setCommRangeMark() {
82
- if (!this.viewOptions.showReviewWindow) {
83
- return;
84
- }
85
- const cce = this.docCtx.document.commentsContainerElement;
86
- const set = new Map();
87
- const commentRangeStatus = [];
88
- for (let i = 0; i < cce.length; i++) {
89
- const commContent = cce.getChild(i);
90
- const { startMark, endMark, props: { id }, focus } = commContent;
91
- const ancestorCommonControl = DocumentSelection.getAncestorCommonControl(startMark, endMark);
92
- const commonRange = RangeUtil.getSelctionRange(startMark, 0, endMark, 1, ancestorCommonControl);
93
- SelectionOverlays.addToCommentSets(commonRange, set);
94
- commentRangeStatus.push({
95
- commContent,
96
- range: commonRange
97
- });
98
- }
99
- this.commsContainer.selectedSet = set;
100
- this.commsContainer.commentRangeStatus = commentRangeStatus;
101
- }
102
- }
103
- //# sourceMappingURL=document-paint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-paint.js","sourceRoot":"lib/","sources":["framework/document-paint.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementMeasure } from \"./element-measure\";\nimport { ElementPaint } from \"./element-paint\";\nimport { ElementRenderCut } from \"./element-render-cut\";\nimport { DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContenxtType } from \"./render-context\";\nimport { Element, SelectionContentRange, ViewOptions } from \"./element-define\";\nimport { DocumentContainerRender } from \"./impl/document/doc-container-impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentSelection } from \"./document-selection\";\nimport { CommsContainerRenderObject } from \"./impl/comments/comments-container-impl\";\nimport { RangeUtil } from \"./range-util\";\nimport { SelectionOverlays } from \"./selection-overlays\";\nimport { EditorContext } from \"./document-context\";\nimport { CommContentElement, CommentRangeStatus } from \"./impl/comments/comment-content-impl\";\n\nexport class DocumentPaint {\n elementMeasure: ElementMeasure;\n elementRenderCut: ElementRenderCut;\n elementPaint: ElementPaint;\n docPages!: Array<DocumentRenderObject>;\n docContainer!: DocumentContainerRender;\n commsContainer!: CommsContainerRenderObject;\n constructor(private viewOptions: ViewOptions, private renderContext: RenderContenxtType, private docCtx: EditorContext, private selectedSets: Map<Element, SelectionContentRange>) {\n this.elementMeasure = new ElementMeasure(this.viewOptions, this.renderContext);\n this.elementRenderCut = new ElementRenderCut(this.viewOptions, this.renderContext);\n this.elementPaint = new ElementPaint(this.viewOptions, this.renderContext);\n }\n\n rePages(): void {\n // const destroyItems = [this.docContainer, this.commsContainer];\n // destroyItems.forEach(item => item?.destroy())\n //Promise.resolve().then(() => { destroyItems.forEach(item => item?.destroy()) });\n if (!this.docCtx.document.length) {\n return;\n }\n this.docContainer = new DocumentContainerRender();\n this.docCtx.selectionState.renderContainer = this.docContainer;\n this.docContainer.rect.width = this.viewOptions.docPageSettings.width;\n // console.time('排版计时');\n const documentRender = this.elementMeasure.measureDocument(this.docCtx.document);\n this.commsContainer = documentRender.getChild(3) as CommsContainerRenderObject;\n if (this.commsContainer) {\n this.commsContainer = this.commsContainer.clone() as CommsContainerRenderObject;\n }\n //console.timeEnd('排版计时');\n //console.time('断页计时');\n const docPages = this.elementRenderCut.cutPage(documentRender, this.docCtx.document);\n //console.timeEnd('断页计时');\n this.docContainer.addPages(docPages);\n ElementUtil.remeasure(this.docContainer);\n this.setCommRangeMark();\n this.docPages = docPages;\n\n\n }\n\n /**\n * 获取设置文档容器的总高度\n */\n getDocumentContainerHeight(): number {\n if (this.docPages.length > 0) {\n const lastPage = this.docPages[this.docPages.length - 1];\n const lastPageY = lastPage.rect.y + lastPage.rect.height + this.viewOptions.docSpace;\n return lastPageY + (this.viewOptions.viewSettings.height * (this.viewOptions.scale - 1));\n }\n else {\n return 0;\n }\n }\n\n refreshView(rePaint = false): void {\n //console.time('计时');\n this.elementPaint.drawPages(this.docContainer, this.selectedSets, this.commsContainer, rePaint);\n //console.timeEnd('计时');\n\n }\n\n getDocPages(): Array<DocumentRenderObject> {\n return this.docPages;\n }\n\n getDocContainer(): DocumentContainerRender {\n return this.docContainer;\n }\n\n /***\n * 设置审阅区间样式痕迹\n */\n setCommRangeMark(): void {\n if (!this.viewOptions.showReviewWindow) {\n return;\n }\n const cce = this.docCtx.document.commentsContainerElement;\n const set = new Map<Element, SelectionContentRange>();\n const commentRangeStatus: Array<CommentRangeStatus> = [];\n for (let i = 0; i < cce.length; i++) {\n const commContent = cce.getChild(i) as CommContentElement;\n const { startMark, endMark, props: { id }, focus } = commContent;\n const ancestorCommonControl = DocumentSelection.getAncestorCommonControl(startMark, endMark);\n const commonRange = RangeUtil.getSelctionRange(startMark, 0, endMark, 1, ancestorCommonControl);\n SelectionOverlays.addToCommentSets(commonRange, set);\n commentRangeStatus.push({\n commContent,\n range: commonRange\n })\n }\n this.commsContainer.selectedSet = set;\n this.commsContainer.commentRangeStatus = commentRangeStatus;\n }\n}\n"]}
@@ -1,128 +0,0 @@
1
- import { EditorContext } from "./document-context";
2
- import { DocumentPaint } from "./document-paint";
3
- import { exportCanvasToPDF, printNodes } from "./document-print";
4
- import { SelectionState } from "./document-selection";
5
- import { ViewOptions } from "./element-define";
6
- import { ElementPaint } from "./element-paint";
7
- import { ElementReader } from "./element-reader";
8
- import { ElementUtil } from "./element-util";
9
- import { RenderContenxt } from "./render-context";
10
- /**
11
- * 离屏打印
12
- */
13
- export class DocumentPrintOffscreen {
14
- documentPaint;
15
- viewOptions;
16
- docCtx;
17
- renderCtx;
18
- elementReader;
19
- ctx;
20
- constructor() {
21
- this.viewOptions = new ViewOptions();
22
- this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';
23
- this.viewOptions.showCharRect = true;
24
- this.viewOptions.drawCharRectColor = 'green';
25
- this.viewOptions.showLineRect = true;
26
- this.viewOptions.docSpace = 20;
27
- this.viewOptions.reviewWindowWidth = 200;
28
- this.viewOptions.mmToPixelsRatio = 3.7795001220703126;
29
- //整个画布的尺寸
30
- this.viewOptions.viewSettings = {
31
- width: 1000,
32
- height: 800
33
- };
34
- this.viewOptions.editUser = {
35
- id: '6666',
36
- name: '管理员'
37
- };
38
- const canvas = document.createElement('canvas');
39
- this.ctx = canvas.getContext('2d');
40
- const ss = new SelectionState();
41
- this.docCtx = new EditorContext(ss, this.viewOptions);
42
- this.renderCtx = new RenderContenxt(this.ctx, this.viewOptions, this.docCtx);
43
- this.documentPaint = new DocumentPaint(this.viewOptions, this.renderCtx, this.docCtx, new Map());
44
- this.elementReader = new ElementReader(this.docCtx, this.viewOptions, this.renderCtx);
45
- this.docCtx.syncRefresh = () => {
46
- };
47
- }
48
- async print(data, ranges = null) {
49
- await this.prepare(data);
50
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
51
- if (!canvasNodes.length) {
52
- console.warn('无可打印页');
53
- return;
54
- }
55
- const docProps = this.docCtx.document.props;
56
- printNodes(canvasNodes, { ...docProps });
57
- }
58
- /**
59
- * 导出PDF
60
- * @param fileName
61
- * @param ss
62
- * @param viewOptions
63
- * @param docCtx
64
- * @param ranges
65
- */
66
- async exportToPDF(data, fileName, ranges = null) {
67
- await this.prepare(data);
68
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
69
- if (!canvasNodes.length) {
70
- console.warn('无可导出页');
71
- return;
72
- }
73
- exportCanvasToPDF(fileName, canvasNodes, this.docCtx.document.props);
74
- }
75
- /**
76
- * 获取绘制的图片,格式为Base64编码
77
- */
78
- async getImagesContent(data, ranges = null) {
79
- await this.prepare(data);
80
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
81
- if (!canvasNodes.length) {
82
- console.warn('无可导出页');
83
- return [];
84
- }
85
- return canvasNodes.map(node => node.toDataURL());
86
- }
87
- /**
88
- * 读取数据,排版
89
- * @param data
90
- */
91
- async prepare(data) {
92
- this.elementReader.read(data);
93
- this.documentPaint.rePages();
94
- await Promise.all(this.docCtx.imageLoader.getLoadTasks());
95
- this.renderCtx.setCanvasProps(this.viewOptions.docPageSettings);
96
- }
97
- getCanvasNodes(printPages, printRanges = null) {
98
- const { width, height } = this.viewOptions.docPageSettings;
99
- const canvasList = [];
100
- for (let i = 0; i < printPages.length; i++) {
101
- if (printRanges && printRanges.indexOf(i) === -1) {
102
- continue;
103
- }
104
- const canvasNode = document.createElement('canvas');
105
- canvasNode.style.cursor = 'text';
106
- canvasNode.style.width = width + 'px';
107
- canvasNode.style.height = height + 'px';
108
- const ctx = canvasNode.getContext('2d');
109
- ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);
110
- const renderCtx = new RenderContenxt(ctx, this.viewOptions, this.docCtx);
111
- renderCtx.setCanvasProps(this.viewOptions.docPageSettings);
112
- renderCtx.drawMode = 'print';
113
- const doc = printPages[i];
114
- const tmp = ElementUtil.cloneRect(doc.rect);
115
- doc.rect.x = 0;
116
- doc.rect.y = 0;
117
- ElementPaint.drawPage(renderCtx, doc, { x: 0, y: 0 });
118
- renderCtx.overlaysContext.clear();
119
- renderCtx.mainCtx.fillStyle = 'white';
120
- renderCtx.mainCtx.fillRect(0, 0, width, height);
121
- renderCtx.commit(this.viewOptions.docPageSettings);
122
- doc.rect = tmp;
123
- canvasList.push(canvasNode);
124
- }
125
- return canvasList;
126
- }
127
- }
128
- //# sourceMappingURL=document-print-offscreen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-print-offscreen.js","sourceRoot":"lib/","sources":["framework/document-print-offscreen.ts"],"names":[],"mappings":"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","sourcesContent":["import { EditorContext } from \"./document-context\";\nimport { DocumentPaint } from \"./document-paint\";\nimport { exportCanvasToPDF, printNodes } from \"./document-print\";\nimport { SelectionState } from \"./document-selection\";\nimport { ViewOptions } from \"./element-define\";\nimport { ElementPaint } from \"./element-paint\";\nimport { ElementReader } from \"./element-reader\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentElement, DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContenxt, RenderContenxtType } from \"./render-context\";\n\n/**\n * 离屏打印\n */\nexport class DocumentPrintOffscreen {\n documentPaint: DocumentPaint;\n viewOptions: ViewOptions;\n docCtx: EditorContext;\n renderCtx: RenderContenxt;\n elementReader: ElementReader;\n ctx: CanvasRenderingContext2D;\n constructor() {\n this.viewOptions = new ViewOptions();\n this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';\n this.viewOptions.showCharRect = true;\n this.viewOptions.drawCharRectColor = 'green';\n this.viewOptions.showLineRect = true;\n this.viewOptions.docSpace = 20;\n this.viewOptions.reviewWindowWidth = 200;\n this.viewOptions.mmToPixelsRatio = 3.7795001220703126;\n //整个画布的尺寸\n this.viewOptions.viewSettings = {\n width: 1000,\n height: 800\n };\n this.viewOptions.editUser = {\n id: '6666',\n name: '管理员'\n };\n const canvas = document.createElement('canvas');\n this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const ss = new SelectionState();\n this.docCtx = new EditorContext(ss, this.viewOptions);\n this.renderCtx = new RenderContenxt(this.ctx, this.viewOptions, this.docCtx);\n this.documentPaint = new DocumentPaint(this.viewOptions, this.renderCtx, this.docCtx, new Map());\n this.elementReader = new ElementReader(this.docCtx, this.viewOptions, this.renderCtx);\n this.docCtx.syncRefresh = () => {\n };\n }\n async print(data: any | DocumentElement, ranges: Array<number> | null = null): Promise<void> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n if (!canvasNodes.length) {\n console.warn('无可打印页')\n return;\n }\n const docProps = this.docCtx.document.props;\n printNodes(canvasNodes, { ...docProps });\n }\n\n /**\n * 导出PDF\n * @param fileName\n * @param ss\n * @param viewOptions\n * @param docCtx\n * @param ranges\n */\n async exportToPDF(data: any | DocumentElement, fileName: string, ranges: Array<number> | null = null): Promise<void> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n if (!canvasNodes.length) {\n console.warn('无可导出页')\n return;\n }\n exportCanvasToPDF(fileName, canvasNodes, this.docCtx.document.props);\n }\n\n\n /**\n * 获取绘制的图片,格式为Base64编码\n */\n async getImagesContent(data: any | DocumentElement, ranges: Array<number> | null = null): Promise<Array<string>> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n if (!canvasNodes.length) {\n console.warn('无可导出页')\n return [];\n }\n return canvasNodes.map(node => node.toDataURL());\n }\n\n /**\n * 读取数据,排版\n * @param data\n */\n private async prepare(data: any | DocumentElement,): Promise<void> {\n this.elementReader.read(data);\n this.documentPaint.rePages();\n await Promise.all(this.docCtx.imageLoader.getLoadTasks());\n this.renderCtx.setCanvasProps(this.viewOptions.docPageSettings);\n }\n\n private getCanvasNodes(printPages: Array<DocumentRenderObject>, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n const { width, height } = this.viewOptions.docPageSettings;\n const canvasList: Array<HTMLCanvasElement> = [];\n for (let i = 0; i < printPages.length; i++) {\n if (printRanges && printRanges.indexOf(i) === -1) {\n continue;\n }\n const canvasNode = document.createElement('canvas');\n canvasNode.style.cursor = 'text';\n canvasNode.style.width = width + 'px';\n canvasNode.style.height = height + 'px';\n const ctx = canvasNode.getContext('2d') as CanvasRenderingContext2D;\n ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);\n const renderCtx = new RenderContenxt(ctx, this.viewOptions, this.docCtx);\n renderCtx.setCanvasProps(this.viewOptions.docPageSettings);\n renderCtx.drawMode = 'print';\n const doc = printPages[i];\n const tmp = ElementUtil.cloneRect(doc.rect);\n doc.rect.x = 0;\n doc.rect.y = 0;\n ElementPaint.drawPage(renderCtx, doc, { x: 0, y: 0 });\n renderCtx.overlaysContext.clear();\n renderCtx.mainCtx.fillStyle = 'white';\n renderCtx.mainCtx.fillRect(0, 0, width, height);\n renderCtx.commit(this.viewOptions.docPageSettings);\n doc.rect = tmp;\n canvasList.push(canvasNode);\n }\n return canvasList;\n }\n}\n"]}
@@ -1,203 +0,0 @@
1
- import { PageOptions } from "./element-define";
2
- import { ElementPaint } from "./element-paint";
3
- import { ElementUtil } from "./element-util";
4
- import { DocumentRenderObject } from "./impl/document/doc-impl";
5
- import { RenderContenxt } from "./render-context";
6
- import { jsPDF } from 'jspdf';
7
- export class documentPrint {
8
- static print(ss, viewOptions, docCtx, printRanges = null) {
9
- const renderCanvasNodes = this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);
10
- if (!renderCanvasNodes.length) {
11
- console.warn('无可打印节点');
12
- return;
13
- }
14
- printNodes(renderCanvasNodes, { ...docCtx.document.props });
15
- }
16
- /**
17
- * 获取绘制的canvas节点
18
- * @param ss
19
- * @param viewOptions
20
- * @param docCtx
21
- * @param printRanges
22
- * @returns
23
- */
24
- static getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges = null) {
25
- const { width, height } = viewOptions.docPageSettings;
26
- const dc = ss.renderContainer;
27
- const canvasList = [];
28
- const printPages = [];
29
- for (let i = 0; i < dc.length; i++) {
30
- if (!printRanges || printRanges.some(pageIndex => pageIndex === i)) {
31
- printPages.push(dc.getChild(i));
32
- }
33
- }
34
- for (let i = 0; i < printPages.length; i++) {
35
- const canvasNode = document.createElement('canvas');
36
- canvasNode.style.cursor = 'text';
37
- canvasNode.style.width = width + 'px';
38
- canvasNode.style.height = height + 'px';
39
- const ctx = canvasNode.getContext('2d');
40
- ElementUtil.setCanvasProps(canvasNode, ctx, viewOptions.docPageSettings);
41
- const renderCtx = new RenderContenxt(ctx, viewOptions, docCtx);
42
- renderCtx.setCanvasProps(viewOptions.docPageSettings);
43
- renderCtx.drawMode = 'print';
44
- const doc = printPages[i];
45
- const tmp = ElementUtil.cloneRect(doc.rect);
46
- doc.rect.x = 0;
47
- doc.rect.y = 0;
48
- ElementPaint.drawPage(renderCtx, doc, { x: 0, y: 0 });
49
- renderCtx.overlaysContext.clear();
50
- renderCtx.mainCtx.fillStyle = 'white';
51
- renderCtx.mainCtx.fillRect(0, 0, width, height);
52
- renderCtx.commit(viewOptions.docPageSettings);
53
- doc.rect = tmp;
54
- canvasList.push(canvasNode);
55
- }
56
- return canvasList;
57
- }
58
- /**
59
- * 导出base64
60
- * @param ss
61
- * @param viewOptions
62
- * @param docCtx
63
- * @param printRanges
64
- * @returns
65
- */
66
- static exportCanvasNodes(ss, viewOptions, docCtx, printRanges = null) {
67
- return this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);
68
- }
69
- /**
70
- * 导出PDF
71
- * @param fileName
72
- * @param ss
73
- * @param viewOptions
74
- * @param docCtx
75
- * @param printRanges
76
- */
77
- static exportPDF(fileName, ss, viewOptions, docCtx, printRanges = null) {
78
- const nodes = this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);
79
- exportCanvasToPDF(fileName, nodes, { ...docCtx.document.props });
80
- }
81
- /**
82
- * 当前当前页
83
- * @param ss
84
- * @param viewOptions
85
- */
86
- static printCurrPage(ss, viewOptions, docCtx) {
87
- const { startHitInfo } = ss;
88
- if (!startHitInfo) {
89
- return;
90
- }
91
- const docPage = ElementUtil.getParentRender(startHitInfo.render, DocumentRenderObject);
92
- if (!docPage) {
93
- return;
94
- }
95
- this.print(ss, viewOptions, docCtx, [docPage.getIndex()]);
96
- }
97
- }
98
- export function createPrintTemplate({ width, height, orient }) {
99
- const str = `
100
- <!DOCTYPE html>
101
- <html lang="zh">
102
- <head>
103
- <meta charset="UTF-8">
104
- <title></title>
105
- <style >
106
- html,
107
- body {
108
- margin: 0;
109
- padding: 0;
110
- }
111
- * {
112
- box-sizing: border-box;
113
- -moz-box-sizing: border-box;
114
- }
115
- @page {
116
- size: ${orient};
117
- margin: 0;
118
- }
119
- div {
120
- width: ${width}mm;
121
- min-height: ${height}mm;
122
- font-size: 0;
123
- }
124
- @media print {
125
- html,
126
- body {
127
- width: ${width}mm;
128
- height: ${height}mm;
129
- }
130
- div {
131
- width: initial;
132
- min-height: initial;
133
- }
134
- }
135
- </style>
136
- </head>
137
- <body></body>
138
- </html>
139
- `.replace(/\n/g, '').replace(/\s+/g, ' ').replace(/'/g, '\\\'');
140
- return str;
141
- }
142
- /**
143
- * 打印DOM
144
- * @param printNodes
145
- * @param options
146
- * @returns
147
- */
148
- export function printNodes(printNodes, options) {
149
- const printIFrame = document.createElement("iframe");
150
- printIFrame.src = 'about:blank';
151
- printIFrame.style.borderWidth = '0';
152
- printIFrame.style.height = "0";
153
- printIFrame.style.display = 'none';
154
- document.body.appendChild(printIFrame);
155
- printIFrame.contentWindow?.document.open("text/html", "printer");
156
- if (!printNodes.length) {
157
- console.warn('无可打印节点');
158
- return;
159
- }
160
- const printSize = new PageOptions(options.width, options.height, options.orient);
161
- const iframeHTML = createPrintTemplate(printSize);
162
- printIFrame.contentWindow?.document.write(iframeHTML);
163
- printIFrame.contentWindow?.document.close();
164
- for (let i = 0; i < printNodes.length; i++) {
165
- const item = printNodes[i];
166
- const div = document.createElement('div');
167
- div.appendChild(item);
168
- printIFrame.contentWindow?.document.body.appendChild(div);
169
- }
170
- printIFrame.contentWindow?.document.body.focus();
171
- setTimeout(() => {
172
- printIFrame.contentWindow?.print();
173
- printIFrame.parentNode?.removeChild(printIFrame);
174
- }, 0);
175
- }
176
- /**
177
- * canvas节点导出到PDF
178
- * @param fileName
179
- * @param nodes
180
- * @param options
181
- */
182
- export function exportCanvasToPDF(fileName, nodes, options) {
183
- if (!fileName) {
184
- fileName = 'document.pdf';
185
- }
186
- else {
187
- fileName = fileName.replace(/[\/\\:*?"<>|]/g, '_');
188
- if (!fileName.endsWith('.pdf')) {
189
- fileName += '.pdf';
190
- }
191
- }
192
- const pdf = new jsPDF(options.orient, 'px', [options.width, options.height]);
193
- for (let i = 0; i < nodes.length; i++) {
194
- const canvas = nodes[i];
195
- const imgData = canvas.toDataURL('image/jpeg', 1.0);
196
- pdf.addImage(imgData, 'JPEG', 0, 0, options.width, options.height);
197
- if (i < nodes.length - 1) {
198
- pdf.addPage();
199
- }
200
- }
201
- pdf.save(fileName);
202
- }
203
- //# sourceMappingURL=document-print.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-print.js","sourceRoot":"lib/","sources":["framework/document-print.ts"],"names":[],"mappings":"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","sourcesContent":["import { EditorContext } from \"./document-context\";\nimport { SelectionState } from \"./document-selection\";\nimport { OrientType, PageOptions, ViewOptions } from \"./element-define\";\nimport { ElementPaint } from \"./element-paint\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContenxt } from \"./render-context\";\nimport { jsPDF } from 'jspdf'\n\nexport class documentPrint {\n static print(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): void {\n const renderCanvasNodes = this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);\n if (!renderCanvasNodes.length) {\n console.warn('无可打印节点');\n return;\n }\n printNodes(renderCanvasNodes, { ...docCtx.document.props });\n }\n\n /**\n * 获取绘制的canvas节点\n * @param ss \n * @param viewOptions \n * @param docCtx \n * @param printRanges \n * @returns \n */\n private static getRenderCanvasNodes(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n const { width, height } = viewOptions.docPageSettings;\n const dc = ss.renderContainer;\n const canvasList: Array<HTMLCanvasElement> = [];\n const printPages: Array<DocumentRenderObject> = [];\n for (let i = 0; i < dc.length; i++) {\n if (!printRanges || printRanges.some(pageIndex => pageIndex === i)) {\n printPages.push(<DocumentRenderObject>dc.getChild(i));\n }\n }\n for (let i = 0; i < printPages.length; i++) {\n const canvasNode = document.createElement('canvas');\n canvasNode.style.cursor = 'text';\n canvasNode.style.width = width + 'px';\n canvasNode.style.height = height + 'px';\n const ctx = canvasNode.getContext('2d') as CanvasRenderingContext2D;\n ElementUtil.setCanvasProps(canvasNode, ctx, viewOptions.docPageSettings);\n const renderCtx = new RenderContenxt(ctx, viewOptions, docCtx);\n renderCtx.setCanvasProps(viewOptions.docPageSettings);\n renderCtx.drawMode = 'print';\n const doc = printPages[i];\n const tmp = ElementUtil.cloneRect(doc.rect);\n doc.rect.x = 0;\n doc.rect.y = 0;\n ElementPaint.drawPage(renderCtx, doc, { x: 0, y: 0 });\n renderCtx.overlaysContext.clear();\n renderCtx.mainCtx.fillStyle = 'white';\n renderCtx.mainCtx.fillRect(0, 0, width, height);\n renderCtx.commit(viewOptions.docPageSettings);\n doc.rect = tmp;\n canvasList.push(canvasNode);\n }\n return canvasList\n }\n\n /**\n * 导出base64\n * @param ss \n * @param viewOptions \n * @param docCtx \n * @param printRanges \n * @returns \n */\n static exportCanvasNodes(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n return this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);\n }\n\n /**\n * 导出PDF\n * @param fileName\n * @param ss\n * @param viewOptions\n * @param docCtx\n * @param printRanges\n */\n static exportPDF(fileName: string, ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): void {\n const nodes = this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);\n exportCanvasToPDF(fileName, nodes, { ...docCtx.document.props })\n }\n\n /**\n * 当前当前页\n * @param ss \n * @param viewOptions \n */\n static printCurrPage(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext,): void {\n const { startHitInfo } = ss;\n if (!startHitInfo) {\n return;\n }\n const docPage = ElementUtil.getParentRender(startHitInfo.render, DocumentRenderObject);\n if (!docPage) {\n return;\n }\n this.print(ss, viewOptions, docCtx, [docPage.getIndex()]);\n }\n}\n\n\nexport function createPrintTemplate({ width, height, orient }: PageOptions): string {\n const str = `\n <!DOCTYPE html>\n <html lang=\"zh\">\n <head>\n <meta charset=\"UTF-8\">\n <title></title>\n <style >\n html,\n body {\n margin: 0;\n padding: 0;\n }\n * {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n }\n @page {\n size: ${orient};\n margin: 0;\n }\n div {\n width: ${width}mm;\n min-height: ${height}mm;\n font-size: 0;\n }\n @media print {\n html,\n body {\n width: ${width}mm;\n height: ${height}mm;\n }\n div {\n width: initial;\n min-height: initial;\n }\n }\n </style>\n </head>\n <body></body>\n </html>\n `.replace(/\\n/g, '').replace(/\\s+/g, ' ').replace(/'/g, '\\\\\\'');\n return str;\n}\n\n\ntype PrintPaperOptions = {\n width: number;\n height: number;\n orient: OrientType;\n};\n\n/**\n * 打印DOM\n * @param printNodes \n * @param options \n * @returns \n */\nexport function printNodes(printNodes: Array<Node>, options: PrintPaperOptions): void {\n const printIFrame = document.createElement(\"iframe\") as HTMLIFrameElement;\n printIFrame.src = 'about:blank';\n printIFrame.style.borderWidth = '0';\n printIFrame.style.height = \"0\";\n printIFrame.style.display = 'none';\n document.body.appendChild(printIFrame);\n printIFrame.contentWindow?.document.open(\"text/html\", \"printer\");\n if (!printNodes.length) {\n console.warn('无可打印节点');\n return;\n }\n const printSize: PageOptions = new PageOptions(options.width, options.height, options.orient);\n const iframeHTML = createPrintTemplate(printSize);\n printIFrame.contentWindow?.document.write(iframeHTML);\n printIFrame.contentWindow?.document.close();\n for (let i = 0; i < printNodes.length; i++) {\n const item = printNodes[i];\n const div = document.createElement('div');\n div.appendChild(item);\n printIFrame.contentWindow?.document.body.appendChild(div)\n }\n printIFrame.contentWindow?.document.body.focus();\n setTimeout(() => {\n printIFrame.contentWindow?.print();\n printIFrame.parentNode?.removeChild(printIFrame);\n }, 0);\n}\n\n/**\n * canvas节点导出到PDF\n * @param fileName \n * @param nodes \n * @param options \n */\nexport function exportCanvasToPDF(fileName: string, nodes: Array<HTMLCanvasElement>, options: PrintPaperOptions): void {\n if (!fileName) {\n fileName = 'document.pdf';\n } else {\n fileName = fileName.replace(/[\\/\\\\:*?\"<>|]/g, '_');\n if (!fileName.endsWith('.pdf')) {\n fileName += '.pdf';\n }\n }\n const pdf = new jsPDF(options.orient, 'px', [options.width, options.height]);\n for (let i = 0; i < nodes.length; i++) {\n const canvas = nodes[i];\n const imgData = canvas.toDataURL('image/jpeg', 1.0);\n pdf.addImage(imgData, 'JPEG', 0, 0, options.width, options.height);\n if (i < nodes.length - 1) {\n pdf.addPage();\n }\n }\n pdf.save(fileName);\n}"]}
@@ -1,106 +0,0 @@
1
- import { TextGroupElement } from "./impl/text/text-impl";
2
- import { ElementUtil } from "./element-util";
3
- import { SelectionRange } from "./document-selection";
4
- export function getFocusTextSegment(selection) {
5
- let { startControl: element, startOffset: offset } = selection;
6
- if (!(element instanceof TextGroupElement))
7
- return false;
8
- if (!supportSegment())
9
- return false;
10
- const focusEle = element;
11
- offset = offset + 1;
12
- offset = offset > focusEle.textMeasures.length ? focusEle.textMeasures.length : offset;
13
- //获取连续的字符
14
- const items = [...getConsecutiveTextsByDirection(element), element, ...getConsecutiveTextsByDirection(element, false)];
15
- const sortItems = getTextSortData(items);
16
- const { index, text } = sortItems.reduce((prev, curr) => {
17
- prev.text += curr.text;
18
- if (prev.completed) {
19
- return prev;
20
- }
21
- if (curr.item === focusEle) {
22
- prev.index += offset;
23
- prev.completed = true;
24
- }
25
- else {
26
- prev.index += curr.item.textMeasures.length;
27
- }
28
- return prev;
29
- }, { completed: false, index: 0, text: '' });
30
- const { index: hitIndex, len: hitLen } = getHitSegment(text, index);
31
- const matchSegment = sortItems.filter(item => (item.index <= hitIndex && item.endIndex > hitIndex) || (item.index <= hitIndex + hitLen && item.endIndex > hitIndex + hitLen));
32
- const startSegment = matchSegment[0];
33
- const endSegment = matchSegment[matchSegment.length - 1];
34
- const startOffset = hitIndex - startSegment.index;
35
- const endOffset = hitIndex + hitLen - endSegment.index;
36
- const newRange = new SelectionRange();
37
- newRange.setStart(startSegment.item, startOffset);
38
- newRange.setEnd(endSegment.item, endOffset);
39
- selection.addRange(newRange);
40
- return true;
41
- }
42
- /**
43
- * 进行分词
44
- * @param text
45
- * @param focusOffset
46
- */
47
- function getHitSegment(text, focusOffset) {
48
- const segmenter = new Intl.Segmenter("zh-CN", { granularity: "word" });
49
- const iterator1 = segmenter.segment(text)[Symbol.iterator]();
50
- const segItems = Array.from(iterator1);
51
- let index = 0;
52
- for (let i = 0; i < segItems.length; i++) {
53
- const segItem = segItems[i];
54
- const currIndex = segItem.index;
55
- const currLen = segItem.segment.length;
56
- if (focusOffset > currIndex && focusOffset <= currLen + currIndex) {
57
- return {
58
- index,
59
- len: currLen
60
- };
61
- }
62
- index += currLen;
63
- }
64
- throw new Error('未获取到对应的分词词组');
65
- }
66
- function supportSegment() {
67
- return typeof Intl.Segmenter === 'function';
68
- }
69
- /**
70
- * 根据前后顺序标识索引位
71
- * @param texts
72
- */
73
- function getTextSortData(texts) {
74
- let index = 0;
75
- const sortItems = [];
76
- for (let i = 0; i < texts.length; i++) {
77
- const item = texts[i];
78
- const sortData = {
79
- len: item.textMeasures.length,
80
- index,
81
- endIndex: index + item.textMeasures.length,
82
- item,
83
- text: item.text
84
- };
85
- sortItems.push(sortData);
86
- index += sortData.len;
87
- }
88
- return sortItems;
89
- }
90
- /**
91
- * 获取指定方向上连续的字符
92
- * @param element
93
- * @param prev
94
- */
95
- function getConsecutiveTextsByDirection(element, prev = true) {
96
- let prevText = element;
97
- const prevTexts = [];
98
- const func = prev ? ElementUtil.getPrevSiblingElement : ElementUtil.getNextSiblingElement;
99
- const addItem = prev ? prevTexts.unshift : prevTexts.push;
100
- while ((prevText = func(prevText)) && prevText instanceof TextGroupElement) {
101
- //addItem(prevText);
102
- addItem.apply(prevTexts, [prevText]);
103
- }
104
- return prevTexts;
105
- }
106
- //# sourceMappingURL=document-segmenter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-segmenter.js","sourceRoot":"lib/","sources":["framework/document-segmenter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Element, LeafElement } from \"./element-define\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { SelectionRange, SelectionState } from \"./document-selection\";\n\ndeclare namespace Intl {\n\n type BCP47LanguageTag = string;\n\n /**\n * An object with some or all properties of the `Intl.Segmenter` constructor `options` parameter.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n */\n interface SegmenterOptions {\n /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */\n localeMatcher?: \"best fit\" | \"lookup\" | undefined;\n /** The type of input to be split */\n granularity?: \"grapheme\" | \"word\" | \"sentence\" | undefined;\n }\n\n interface Segmenter {\n /**\n * Returns `Segments` object containing the segments of the input string, using the segmenter's locale and granularity.\n *\n * @param input - The text to be segmented as a `string`.\n *\n * @returns A new iterable Segments object containing the segments of the input string, using the segmenter's locale and granularity.\n */\n segment(input: string): Segments;\n\n resolvedOptions(): ResolvedSegmenterOptions;\n }\n\n interface ResolvedSegmenterOptions {\n locale: string;\n granularity: \"grapheme\" | \"word\" | \"sentence\";\n }\n\n interface Segments {\n /**\n * Returns an object describing the segment in the original string that includes the code unit at a specified index.\n *\n * @param codeUnitIndex - A number specifying the index of the code unit in the original input string. If the value is omitted, it defaults to `0`.\n */\n containing(codeUnitIndex?: number): SegmentData;\n\n /** Returns an iterator to iterate over the segments. */\n [Symbol.iterator](): IterableIterator<SegmentData>;\n }\n\n interface SegmentData {\n /** A string containing the segment extracted from the original input string. */\n segment: string;\n /** The code unit index in the original input string at which the segment begins. */\n index: number;\n /** The complete input string that was segmented. */\n input: string;\n /**\n * A boolean value only if granularity is \"word\"; otherwise, undefined.\n * If granularity is \"word\", then isWordLike is true when the segment is word-like (i.e., consists of letters/numbers/ideographs/etc.); otherwise, false.\n */\n isWordLike?: boolean;\n }\n\n const Segmenter: {\n prototype: Segmenter;\n\n /**\n * Creates a new `Intl.Segmenter` object.\n *\n * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n * For the general form and interpretation of the `locales` argument,\n * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n *\n * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n * with some or all options of `SegmenterOptions`.\n *\n * @returns [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segments) object.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter).\n */\n new(locales?: BCP47LanguageTag | BCP47LanguageTag[], options?: SegmenterOptions): Segmenter;\n\n /**\n * Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale.\n *\n * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n * For the general form and interpretation of the `locales` argument,\n * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n *\n * @param options An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf#parameters).\n * with some or all possible options.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf)\n */\n supportedLocalesOf(locales: BCP47LanguageTag | BCP47LanguageTag[], options?: Pick<SegmenterOptions, \"localeMatcher\">): BCP47LanguageTag[];\n };\n}\n\nexport function getFocusTextSegment(selection: SelectionState): boolean {\n let { startControl: element, startOffset: offset } = selection;\n if (!(element instanceof TextGroupElement)) return false;\n if (!supportSegment()) return false;\n const focusEle = element as TextGroupElement;\n offset = offset + 1;\n offset = offset > focusEle.textMeasures.length ? focusEle.textMeasures.length : offset;\n //获取连续的字符\n const items = [...getConsecutiveTextsByDirection(element), element, ...getConsecutiveTextsByDirection(element, false)];\n const sortItems = getTextSortData(items);\n const { index, text } = sortItems.reduce((prev, curr) => {\n prev.text += curr.text;\n if (prev.completed) {\n return prev;\n }\n if (curr.item === focusEle) {\n prev.index += offset;\n prev.completed = true;\n } else {\n prev.index += curr.item.textMeasures.length;\n }\n return prev\n }, { completed: false, index: 0, text: '' });\n const { index: hitIndex, len: hitLen } = getHitSegment(text, index);\n const matchSegment = sortItems.filter(item => (item.index <= hitIndex && item.endIndex > hitIndex) || (item.index <= hitIndex + hitLen && item.endIndex > hitIndex + hitLen));\n const startSegment = matchSegment[0];\n const endSegment = matchSegment[matchSegment.length - 1];\n const startOffset = hitIndex - startSegment.index;\n const endOffset = hitIndex + hitLen - endSegment.index;\n const newRange = new SelectionRange();\n newRange.setStart(startSegment.item, startOffset);\n newRange.setEnd(endSegment.item, endOffset);\n selection.addRange(newRange);\n return true;\n}\n\ninterface TextSegmentData {\n item: TextGroupElement,\n len: number,\n index: number,\n endIndex: number,\n text: string\n}\n\n/**\n * 进行分词\n * @param text\n * @param focusOffset\n */\nfunction getHitSegment(text: string, focusOffset): { index: number, len: number } {\n const segmenter = new Intl.Segmenter(\"zh-CN\", { granularity: \"word\" });\n const iterator1 = segmenter.segment(text)[Symbol.iterator]();\n const segItems = Array.from(iterator1);\n let index = 0;\n for (let i = 0; i < segItems.length; i++) {\n const segItem = segItems[i];\n const currIndex = segItem.index;\n const currLen = segItem.segment.length;\n if (focusOffset > currIndex && focusOffset <= currLen + currIndex) {\n return {\n index,\n len: currLen\n }\n }\n index += currLen;\n }\n throw new Error('未获取到对应的分词词组');\n}\n\nfunction supportSegment(): boolean {\n return typeof Intl.Segmenter === 'function';\n}\n\n/**\n * 根据前后顺序标识索引位\n * @param texts\n */\nfunction getTextSortData(texts: Array<TextGroupElement>): Array<TextSegmentData> {\n let index = 0;\n const sortItems: Array<TextSegmentData> = [];\n for (let i = 0; i < texts.length; i++) {\n const item = texts[i];\n const sortData = {\n len: item.textMeasures.length,\n index,\n endIndex: index + item.textMeasures.length,\n item,\n text: item.text\n };\n sortItems.push(sortData);\n index += sortData.len;\n }\n return sortItems;\n}\n\n/**\n * 获取指定方向上连续的字符\n * @param element\n * @param prev\n */\nfunction getConsecutiveTextsByDirection(element: TextGroupElement, prev = true): Array<TextGroupElement> {\n let prevText: Element | null = element;\n const prevTexts: Array<TextGroupElement> = [];\n const func = prev ? ElementUtil.getPrevSiblingElement : ElementUtil.getNextSiblingElement;\n const addItem = prev ? prevTexts.unshift : prevTexts.push;\n while ((prevText = func(prevText)) && prevText instanceof TextGroupElement) {\n //addItem(prevText);\n addItem.apply(prevTexts, [prevText]);\n }\n return prevTexts;\n}\n"]}