reamkit 1.6.0 → 1.9.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 (55) hide show
  1. package/README.md +13 -1
  2. package/dist/esm/core/converter/ream.d.ts +1 -0
  3. package/dist/esm/core/converter/ream.js +1 -1
  4. package/dist/esm/core/document-model/types.d.ts +3 -1
  5. package/dist/esm/core/drawingml/chart-serializer.d.ts +2 -0
  6. package/dist/esm/core/drawingml/chart-serializer.js +53 -0
  7. package/dist/esm/core/drawingml/shape-render.d.ts +3 -1
  8. package/dist/esm/core/drawingml/shape-render.js +27 -1
  9. package/dist/esm/core/vector.d.ts +10 -0
  10. package/dist/esm/excel/print-model.js +6 -3
  11. package/dist/esm/excel/xlsx-writer.js +81 -17
  12. package/dist/esm/html/html-writer.js +4 -2
  13. package/dist/esm/layout/styled-layout.js +5 -2
  14. package/dist/esm/pdf/shading.d.ts +12 -0
  15. package/dist/esm/pdf/shading.js +152 -0
  16. package/dist/esm/pdf/styled-page-emitter.js +29 -4
  17. package/dist/esm/pdf/vector-graphics.d.ts +1 -1
  18. package/dist/esm/pdf/vector-graphics.js +5 -3
  19. package/dist/esm/pdf-reader/ccitt.d.ts +15 -0
  20. package/dist/esm/pdf-reader/ccitt.js +394 -0
  21. package/dist/esm/pdf-reader/content.d.ts +43 -1
  22. package/dist/esm/pdf-reader/content.js +173 -4
  23. package/dist/esm/pdf-reader/crypto.d.ts +7 -0
  24. package/dist/esm/pdf-reader/crypto.js +609 -0
  25. package/dist/esm/pdf-reader/decrypt.d.ts +5 -0
  26. package/dist/esm/pdf-reader/decrypt.js +211 -0
  27. package/dist/esm/pdf-reader/document.d.ts +8 -1
  28. package/dist/esm/pdf-reader/document.js +210 -27
  29. package/dist/esm/pdf-reader/flow-build.d.ts +16 -1
  30. package/dist/esm/pdf-reader/flow-build.js +113 -3
  31. package/dist/esm/pdf-reader/image-decode.d.ts +15 -0
  32. package/dist/esm/pdf-reader/image-decode.js +550 -0
  33. package/dist/esm/pdf-reader/images.d.ts +16 -0
  34. package/dist/esm/pdf-reader/images.js +90 -0
  35. package/dist/esm/pdf-reader/layout.d.ts +2 -2
  36. package/dist/esm/pdf-reader/layout.js +86 -14
  37. package/dist/esm/pdf-reader/png-encode.d.ts +2 -0
  38. package/dist/esm/pdf-reader/png-encode.js +98 -0
  39. package/dist/esm/pdf-reader/predictor.d.ts +7 -0
  40. package/dist/esm/pdf-reader/predictor.js +61 -0
  41. package/dist/esm/pdf-reader/reader.d.ts +1 -1
  42. package/dist/esm/pdf-reader/reader.js +14 -7
  43. package/dist/esm/pdf-reader/shading.d.ts +3 -0
  44. package/dist/esm/pdf-reader/shading.js +147 -0
  45. package/dist/esm/pdf-reader/tagged.d.ts +2 -2
  46. package/dist/esm/pdf-reader/tagged.js +60 -7
  47. package/dist/esm/pdf-reader/text.js +91 -10
  48. package/dist/esm/pdf-reader/vector.d.ts +16 -0
  49. package/dist/esm/pdf-reader/vector.js +63 -0
  50. package/dist/esm/svg/svg-writer.js +12 -5
  51. package/dist/esm/word/docx-writer.js +104 -8
  52. package/dist/esm/word/drawing-parser.js +28 -17
  53. package/dist/esm/word/omml-serializer.d.ts +2 -0
  54. package/dist/esm/word/omml-serializer.js +48 -0
  55. package/package.json +1 -1
@@ -44,18 +44,85 @@ function initialState() {
44
44
  wordSpacing: 0,
45
45
  hScale: 1,
46
46
  leading: 0,
47
- rise: 0
47
+ rise: 0,
48
+ fillColor: "000000",
49
+ strokeColor: "000000",
50
+ lineWidth: 1,
51
+ fillGradient: void 0
48
52
  };
49
53
  }
50
- function interpretContent(bytes, fonts) {
54
+ function interpretContent(bytes, fonts, initialCtm = IDENTITY, shadings = /* @__PURE__ */ new Map()) {
51
55
  const runs = [];
56
+ const images = [];
57
+ const vectors = [];
52
58
  const lexer = new Lexer(bytes);
53
59
  const stack = [];
54
60
  let state = initialState();
61
+ state.ctm = initialCtm;
55
62
  let tm = IDENTITY;
56
63
  let tlm = IDENTITY;
64
+ let path = [];
57
65
  let operands = [];
58
66
  const mcStack = [];
67
+ const toPage = (x, y) => [x * state.ctm[0] + y * state.ctm[2] + state.ctm[4], x * state.ctm[1] + y * state.ctm[3] + state.ctm[5]];
68
+ const moveTo = (x, y) => {
69
+ const [px, py] = toPage(x, y);
70
+ path.push({
71
+ op: "move",
72
+ x: px,
73
+ y: py
74
+ });
75
+ };
76
+ const lineTo = (x, y) => {
77
+ const [px, py] = toPage(x, y);
78
+ path.push({
79
+ op: "line",
80
+ x: px,
81
+ y: py
82
+ });
83
+ };
84
+ const curveTo = (a, b, c, d, e, f) => {
85
+ const [x1, y1] = toPage(a, b);
86
+ const [x2, y2] = toPage(c, d);
87
+ const [x, y] = toPage(e, f);
88
+ path.push({
89
+ op: "cubic",
90
+ x1,
91
+ y1,
92
+ x2,
93
+ y2,
94
+ x,
95
+ y
96
+ });
97
+ };
98
+ const rectTo = (x, y, w, h) => {
99
+ moveTo(x, y);
100
+ lineTo(x + w, y);
101
+ lineTo(x + w, y + h);
102
+ lineTo(x, y + h);
103
+ path.push({ op: "close" });
104
+ };
105
+ const ctmLineWidth = () => {
106
+ const m = state.ctm;
107
+ const scale = Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2])) || 1;
108
+ return state.lineWidth * scale;
109
+ };
110
+ const paintPath = (fill, stroke) => {
111
+ if (path.length >= 2 && (fill || stroke)) {
112
+ const mcid = mcStack.length > 0 ? mcStack[mcStack.length - 1] : void 0;
113
+ vectors.push({
114
+ segs: path,
115
+ ...fill ? { fillHex: state.fillColor } : {},
116
+ ...fill && state.fillGradient ? { gradient: state.fillGradient } : {},
117
+ ...stroke ? {
118
+ strokeHex: state.strokeColor,
119
+ lineWidth: ctmLineWidth()
120
+ } : {},
121
+ ...mcid !== void 0 ? { mcid } : {}
122
+ });
123
+ }
124
+ path = [];
125
+ };
59
126
  const num = (i) => {
60
127
  const v = operands[i];
61
128
  return typeof v === "number" ? v : 0;
@@ -179,6 +246,89 @@ function interpretContent(bytes, fonts) {
179
246
  case "EMC":
180
247
  mcStack.pop();
181
248
  break;
249
+ case "Do": {
250
+ const nm = operands[0];
251
+ if (nm instanceof PdfName) {
252
+ const mcid = mcStack.length > 0 ? mcStack[mcStack.length - 1] : void 0;
253
+ images.push({
254
+ name: nm.value,
255
+ ctm: state.ctm,
256
+ ...mcid !== void 0 ? { mcid } : {}
257
+ });
258
+ }
259
+ break;
260
+ }
261
+ case "rg":
262
+ state.fillColor = rgbHex(num(0), num(1), num(2));
263
+ state.fillGradient = void 0;
264
+ break;
265
+ case "g":
266
+ state.fillColor = grayHex(num(0));
267
+ state.fillGradient = void 0;
268
+ break;
269
+ case "k":
270
+ state.fillColor = cmykHex(num(0), num(1), num(2), num(3));
271
+ state.fillGradient = void 0;
272
+ break;
273
+ case "scn":
274
+ case "sc": {
275
+ const last = operands[operands.length - 1];
276
+ state.fillGradient = last instanceof PdfName ? shadings.get(last.value) : void 0;
277
+ break;
278
+ }
279
+ case "RG":
280
+ state.strokeColor = rgbHex(num(0), num(1), num(2));
281
+ break;
282
+ case "G":
283
+ state.strokeColor = grayHex(num(0));
284
+ break;
285
+ case "K":
286
+ state.strokeColor = cmykHex(num(0), num(1), num(2), num(3));
287
+ break;
288
+ case "w":
289
+ state.lineWidth = num(0);
290
+ break;
291
+ case "m":
292
+ moveTo(num(0), num(1));
293
+ break;
294
+ case "l":
295
+ lineTo(num(0), num(1));
296
+ break;
297
+ case "c":
298
+ curveTo(num(0), num(1), num(2), num(3), num(4), num(5));
299
+ break;
300
+ case "re":
301
+ rectTo(num(0), num(1), num(2), num(3));
302
+ break;
303
+ case "h":
304
+ path.push({ op: "close" });
305
+ break;
306
+ case "f":
307
+ case "F":
308
+ case "f*":
309
+ paintPath(true, false);
310
+ break;
311
+ case "S":
312
+ paintPath(false, true);
313
+ break;
314
+ case "s":
315
+ path.push({ op: "close" });
316
+ paintPath(false, true);
317
+ break;
318
+ case "B":
319
+ case "B*":
320
+ paintPath(true, true);
321
+ break;
322
+ case "b":
323
+ case "b*":
324
+ path.push({ op: "close" });
325
+ paintPath(true, true);
326
+ break;
327
+ case "n":
328
+ paintPath(false, false);
329
+ break;
330
+ case "W":
331
+ case "W*": break;
182
332
  default: break;
183
333
  }
184
334
  };
@@ -215,7 +365,26 @@ function interpretContent(bytes, fonts) {
215
365
  break;
216
366
  }
217
367
  }
218
- return runs;
368
+ return {
369
+ texts: runs,
370
+ images,
371
+ vectors
372
+ };
373
+ }
374
+ function clamp255(v) {
375
+ return Math.max(0, Math.min(255, Math.round(v * 255)));
376
+ }
377
+ function hex2(v) {
378
+ return clamp255(v).toString(16).padStart(2, "0");
379
+ }
380
+ function rgbHex(r, g, b) {
381
+ return (hex2(r) + hex2(g) + hex2(b)).toUpperCase();
382
+ }
383
+ function grayHex(v) {
384
+ return rgbHex(v, v, v);
385
+ }
386
+ function cmykHex(c, m, y, k) {
387
+ return rgbHex((1 - c) * (1 - k), (1 - m) * (1 - k), (1 - y) * (1 - k));
219
388
  }
220
389
  function matrixFromOperands(operands) {
221
390
  const n = (i) => typeof operands[i] === "number" ? operands[i] : 0;
@@ -289,4 +458,4 @@ function skipInlineImage(lexer) {
289
458
  lexer.pos = ei < 0 ? lexer.length : ei + 2;
290
459
  }
291
460
  //#endregion
292
- export { interpretContent };
461
+ export { IDENTITY, interpretContent, multiply };
@@ -0,0 +1,7 @@
1
+ export declare function rc4(key: Uint8Array, data: Uint8Array): Uint8Array;
2
+ export declare function md5(input: Uint8Array): Uint8Array;
3
+ export declare function sha256(input: Uint8Array): Uint8Array;
4
+ export declare function sha512(input: Uint8Array): Uint8Array;
5
+ export declare function sha384(input: Uint8Array): Uint8Array;
6
+ export declare function aesCbcDecrypt(key: Uint8Array, iv: Uint8Array, data: Uint8Array, stripPad: boolean): Uint8Array;
7
+ export declare function aesCbcEncrypt(key: Uint8Array, iv: Uint8Array, data: Uint8Array): Uint8Array;