@jasy/pdf 1.0.0-alpha.1 → 1.0.0-alpha.10

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 (275) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -21
  3. package/dist/api/args.d.ts +1 -1
  4. package/dist/api/args.js +2 -5
  5. package/dist/api/color.d.ts +4 -4
  6. package/dist/api/color.js +11 -17
  7. package/dist/api/content.d.ts +20 -13
  8. package/dist/api/content.js +44 -29
  9. package/dist/api/descriptor.d.ts +2 -2
  10. package/dist/api/descriptor.js +121 -31
  11. package/dist/api/dimension.d.ts +76 -0
  12. package/dist/api/dimension.js +43 -0
  13. package/dist/api/font-url.d.ts +28 -0
  14. package/dist/api/font-url.js +134 -0
  15. package/dist/api/forms.d.ts +347 -0
  16. package/dist/api/forms.js +189 -0
  17. package/dist/api/gradient.d.ts +53 -0
  18. package/dist/api/gradient.js +97 -0
  19. package/dist/api/index.d.ts +13 -8
  20. package/dist/api/index.js +13 -24
  21. package/dist/api/insets.d.ts +19 -12
  22. package/dist/api/insets.js +19 -12
  23. package/dist/api/layout.d.ts +149 -25
  24. package/dist/api/layout.js +182 -51
  25. package/dist/api/page-builder.d.ts +40 -0
  26. package/dist/api/page-builder.js +44 -0
  27. package/dist/api/structure.d.ts +100 -13
  28. package/dist/api/structure.js +179 -88
  29. package/dist/api/table.d.ts +5 -5
  30. package/dist/api/table.js +38 -26
  31. package/dist/api/text.d.ts +90 -4
  32. package/dist/api/text.js +116 -31
  33. package/dist/assets/font-data.d.ts +2 -0
  34. package/dist/assets/font-data.js +21 -0
  35. package/dist/assets/font-data.ts +37 -0
  36. package/dist/common/color.js +1 -5
  37. package/dist/constants/page-sizes.js +3 -6
  38. package/dist/constants/pdf-parts.js +1 -4
  39. package/dist/crypto/legacy-handler.d.ts +43 -0
  40. package/dist/crypto/legacy-handler.js +145 -0
  41. package/dist/crypto/security-handler.d.ts +62 -0
  42. package/dist/crypto/security-handler.js +155 -0
  43. package/dist/crypto/webcrypto.d.ts +11 -0
  44. package/dist/crypto/webcrypto.js +62 -0
  45. package/dist/edit/acroform-reader.d.ts +70 -0
  46. package/dist/edit/acroform-reader.js +126 -0
  47. package/dist/edit/appearance.d.ts +47 -0
  48. package/dist/edit/appearance.js +171 -0
  49. package/dist/edit/document.d.ts +145 -0
  50. package/dist/edit/document.js +642 -0
  51. package/dist/edit/fill.d.ts +65 -0
  52. package/dist/edit/fill.js +424 -0
  53. package/dist/edit/flatten.d.ts +54 -0
  54. package/dist/edit/flatten.js +462 -0
  55. package/dist/edit/index.d.ts +20 -0
  56. package/dist/edit/index.js +18 -0
  57. package/dist/edit/lexer.d.ts +30 -0
  58. package/dist/edit/lexer.js +285 -0
  59. package/dist/edit/objects.d.ts +68 -0
  60. package/dist/edit/objects.js +83 -0
  61. package/dist/edit/writer.d.ts +60 -0
  62. package/dist/edit/writer.js +283 -0
  63. package/dist/elements/container-element.d.ts +50 -5
  64. package/dist/elements/container-element.js +100 -39
  65. package/dist/elements/forms/checkbox-element.d.ts +51 -0
  66. package/dist/elements/forms/checkbox-element.js +48 -0
  67. package/dist/elements/forms/choice-element.d.ts +53 -0
  68. package/dist/elements/forms/choice-element.js +59 -0
  69. package/dist/elements/forms/push-button-element.d.ts +56 -0
  70. package/dist/elements/forms/push-button-element.js +49 -0
  71. package/dist/elements/forms/radio-element.d.ts +52 -0
  72. package/dist/elements/forms/radio-element.js +49 -0
  73. package/dist/elements/forms/signature-element.d.ts +54 -0
  74. package/dist/elements/forms/signature-element.js +47 -0
  75. package/dist/elements/forms/text-field-element.d.ts +61 -0
  76. package/dist/elements/forms/text-field-element.js +54 -0
  77. package/dist/elements/image-element.d.ts +58 -6
  78. package/dist/elements/image-element.js +145 -111
  79. package/dist/elements/index.d.ts +26 -10
  80. package/dist/elements/index.js +26 -28
  81. package/dist/elements/layout/anchor-element.d.ts +23 -0
  82. package/dist/elements/layout/anchor-element.js +27 -0
  83. package/dist/elements/layout/bookmark-element.d.ts +27 -0
  84. package/dist/elements/layout/bookmark-element.js +30 -0
  85. package/dist/elements/layout/default-text-style-element.d.ts +30 -0
  86. package/dist/elements/layout/default-text-style-element.js +47 -0
  87. package/dist/elements/layout/deferred-element.d.ts +3 -3
  88. package/dist/elements/layout/deferred-element.js +4 -8
  89. package/dist/elements/layout/expanded-element.d.ts +6 -4
  90. package/dist/elements/layout/expanded-element.js +22 -17
  91. package/dist/elements/layout/keep-together-element.d.ts +42 -0
  92. package/dist/elements/layout/keep-together-element.js +85 -0
  93. package/dist/elements/layout/link-element.d.ts +33 -0
  94. package/dist/elements/layout/link-element.js +39 -0
  95. package/dist/elements/layout/padding-element.d.ts +10 -5
  96. package/dist/elements/layout/padding-element.js +25 -16
  97. package/dist/elements/layout/page-break-element.d.ts +17 -0
  98. package/dist/elements/layout/page-break-element.js +24 -0
  99. package/dist/elements/layout/page-builder-element.d.ts +32 -0
  100. package/dist/elements/layout/page-builder-element.js +45 -0
  101. package/dist/elements/layout/positioned-element.d.ts +47 -0
  102. package/dist/elements/layout/positioned-element.js +73 -0
  103. package/dist/elements/layout/repeating-header-element.d.ts +3 -3
  104. package/dist/elements/layout/repeating-header-element.js +8 -12
  105. package/dist/elements/layout/rotated-box-element.d.ts +35 -0
  106. package/dist/elements/layout/rotated-box-element.js +54 -0
  107. package/dist/elements/layout/rotated-element.d.ts +32 -0
  108. package/dist/elements/layout/rotated-element.js +41 -0
  109. package/dist/elements/layout/sized-container-element.d.ts +2 -2
  110. package/dist/elements/layout/sized-container-element.js +6 -11
  111. package/dist/elements/layout/struct-group.d.ts +28 -0
  112. package/dist/elements/layout/struct-group.js +42 -0
  113. package/dist/elements/line-element.d.ts +3 -3
  114. package/dist/elements/line-element.js +5 -10
  115. package/dist/elements/page-element.d.ts +26 -6
  116. package/dist/elements/page-element.js +72 -27
  117. package/dist/elements/pdf-document-element.d.ts +10 -4
  118. package/dist/elements/pdf-document-element.js +11 -10
  119. package/dist/elements/pdf-element.d.ts +150 -4
  120. package/dist/elements/pdf-element.js +138 -20
  121. package/dist/elements/rectangle-element.d.ts +52 -11
  122. package/dist/elements/rectangle-element.js +129 -36
  123. package/dist/elements/row-element.d.ts +45 -4
  124. package/dist/elements/row-element.js +66 -18
  125. package/dist/elements/text-element.d.ts +132 -11
  126. package/dist/elements/text-element.js +206 -56
  127. package/dist/forms/acroform.d.ts +63 -0
  128. package/dist/forms/acroform.js +427 -0
  129. package/dist/forms/appearance.d.ts +58 -0
  130. package/dist/forms/appearance.js +204 -0
  131. package/dist/forms/field.d.ts +164 -0
  132. package/dist/forms/field.js +1 -0
  133. package/dist/forms/pdf.d.ts +19 -0
  134. package/dist/forms/pdf.js +28 -0
  135. package/dist/index.d.ts +3 -3
  136. package/dist/index.js +3 -19
  137. package/dist/ir/display-list.d.ts +197 -8
  138. package/dist/ir/display-list.js +8 -2
  139. package/dist/layout/alignment.d.ts +10 -0
  140. package/dist/layout/alignment.js +6 -0
  141. package/dist/layout/box-constraints.d.ts +61 -0
  142. package/dist/layout/box-constraints.js +88 -6
  143. package/dist/layout/collect-images.d.ts +9 -0
  144. package/dist/layout/collect-images.js +34 -0
  145. package/dist/layout/fragmentation.d.ts +20 -1
  146. package/dist/layout/fragmentation.js +74 -18
  147. package/dist/layout/insets.d.ts +28 -0
  148. package/dist/layout/insets.js +20 -0
  149. package/dist/platform/browser-fs.d.ts +2 -0
  150. package/dist/platform/browser-fs.js +9 -0
  151. package/dist/platform/browser-image.d.ts +5 -0
  152. package/dist/platform/browser-image.js +13 -0
  153. package/dist/platform/node-fs.d.ts +2 -0
  154. package/dist/platform/node-fs.js +10 -0
  155. package/dist/platform/node-image.d.ts +5 -0
  156. package/dist/platform/node-image.js +9 -0
  157. package/dist/renderer/anchor-renderer.d.ts +6 -0
  158. package/dist/renderer/anchor-renderer.js +11 -0
  159. package/dist/renderer/bookmark-renderer.d.ts +6 -0
  160. package/dist/renderer/bookmark-renderer.js +11 -0
  161. package/dist/renderer/container-renderer.d.ts +3 -3
  162. package/dist/renderer/container-renderer.js +11 -28
  163. package/dist/renderer/default-text-style-renderer.d.ts +6 -0
  164. package/dist/renderer/default-text-style-renderer.js +10 -0
  165. package/dist/renderer/deferred-renderer.d.ts +3 -3
  166. package/dist/renderer/deferred-renderer.js +8 -23
  167. package/dist/renderer/emoji-image.d.ts +9 -0
  168. package/dist/renderer/emoji-image.js +68 -0
  169. package/dist/renderer/expanded-renderer.d.ts +3 -3
  170. package/dist/renderer/expanded-renderer.js +6 -21
  171. package/dist/renderer/form-field-renderer.d.ts +20 -0
  172. package/dist/renderer/form-field-renderer.js +12 -0
  173. package/dist/renderer/image-renderer.d.ts +4 -4
  174. package/dist/renderer/image-renderer.js +86 -75
  175. package/dist/renderer/index.d.ts +10 -10
  176. package/dist/renderer/index.js +10 -26
  177. package/dist/renderer/keep-together-renderer.d.ts +10 -0
  178. package/dist/renderer/keep-together-renderer.js +12 -0
  179. package/dist/renderer/line-renderer.d.ts +3 -3
  180. package/dist/renderer/line-renderer.js +13 -28
  181. package/dist/renderer/link-renderer.d.ts +6 -0
  182. package/dist/renderer/link-renderer.js +11 -0
  183. package/dist/renderer/padding-renderer.d.ts +3 -3
  184. package/dist/renderer/padding-renderer.js +6 -21
  185. package/dist/renderer/page-break-renderer.d.ts +14 -0
  186. package/dist/renderer/page-break-renderer.js +15 -0
  187. package/dist/renderer/page-builder-renderer.d.ts +6 -0
  188. package/dist/renderer/page-builder-renderer.js +11 -0
  189. package/dist/renderer/page-renderer.d.ts +2 -2
  190. package/dist/renderer/page-renderer.js +115 -77
  191. package/dist/renderer/pdf-backend.d.ts +31 -4
  192. package/dist/renderer/pdf-backend.js +287 -49
  193. package/dist/renderer/pdf-config.js +4 -7
  194. package/dist/renderer/pdf-document-class.d.ts +5 -5
  195. package/dist/renderer/pdf-document-class.js +27 -41
  196. package/dist/renderer/pdf-document-renderer.d.ts +19 -10
  197. package/dist/renderer/pdf-document-renderer.js +135 -91
  198. package/dist/renderer/pdf-renderer.d.ts +2 -2
  199. package/dist/renderer/pdf-renderer.js +165 -90
  200. package/dist/renderer/positioned-renderer.d.ts +6 -0
  201. package/dist/renderer/positioned-renderer.js +10 -0
  202. package/dist/renderer/rectangle-renderer.d.ts +3 -3
  203. package/dist/renderer/rectangle-renderer.js +49 -44
  204. package/dist/renderer/repeating-header-renderer.d.ts +3 -3
  205. package/dist/renderer/repeating-header-renderer.js +10 -26
  206. package/dist/renderer/rotated-renderer.d.ts +7 -0
  207. package/dist/renderer/rotated-renderer.js +29 -0
  208. package/dist/renderer/row-renderer.d.ts +3 -3
  209. package/dist/renderer/row-renderer.js +11 -28
  210. package/dist/renderer/struct-group-renderer.d.ts +10 -0
  211. package/dist/renderer/struct-group-renderer.js +24 -0
  212. package/dist/renderer/text-renderer.d.ts +9 -5
  213. package/dist/renderer/text-renderer.js +437 -89
  214. package/dist/text/advance.d.ts +34 -0
  215. package/dist/text/advance.js +45 -0
  216. package/dist/text/arabic.d.ts +20 -0
  217. package/dist/text/arabic.js +101 -0
  218. package/dist/text/bidi.d.ts +33 -0
  219. package/dist/text/bidi.js +94 -0
  220. package/dist/text/emoji-codepoints.d.ts +1 -0
  221. package/dist/text/emoji-codepoints.js +29 -0
  222. package/dist/text/font-fallback.d.ts +25 -0
  223. package/dist/text/font-fallback.js +38 -0
  224. package/dist/text/line-breaker.d.ts +50 -12
  225. package/dist/text/line-breaker.js +158 -37
  226. package/dist/text/line-metrics.d.ts +49 -0
  227. package/dist/text/line-metrics.js +57 -0
  228. package/dist/text/orphans-widows.d.ts +27 -0
  229. package/dist/text/orphans-widows.js +53 -0
  230. package/dist/text/shape.d.ts +29 -0
  231. package/dist/text/shape.js +67 -0
  232. package/dist/text/text-decoration.d.ts +50 -0
  233. package/dist/text/text-decoration.js +62 -0
  234. package/dist/text/text-style.d.ts +60 -0
  235. package/dist/text/text-style.js +79 -0
  236. package/dist/utils/afm-parser.d.ts +34 -0
  237. package/dist/utils/afm-parser.js +76 -17
  238. package/dist/utils/bytes.d.ts +24 -0
  239. package/dist/utils/bytes.js +76 -0
  240. package/dist/utils/dest-registry.d.ts +22 -0
  241. package/dist/utils/dest-registry.js +32 -0
  242. package/dist/utils/flex-layout.d.ts +36 -9
  243. package/dist/utils/flex-layout.js +207 -30
  244. package/dist/utils/font-metrics.d.ts +20 -1
  245. package/dist/utils/font-metrics.js +1 -2
  246. package/dist/utils/font-path.js +3 -6
  247. package/dist/utils/gsub.d.ts +36 -0
  248. package/dist/utils/gsub.js +178 -0
  249. package/dist/utils/image-helper.d.ts +6 -5
  250. package/dist/utils/image-helper.js +101 -111
  251. package/dist/utils/inflate.d.ts +16 -0
  252. package/dist/utils/inflate.js +52 -0
  253. package/dist/utils/md5.d.ts +4 -0
  254. package/dist/utils/md5.js +79 -0
  255. package/dist/utils/outline.d.ts +21 -0
  256. package/dist/utils/outline.js +79 -0
  257. package/dist/utils/pdf-object-manager.d.ts +110 -8
  258. package/dist/utils/pdf-object-manager.js +583 -141
  259. package/dist/utils/renderer-registry.d.ts +13 -1
  260. package/dist/utils/renderer-registry.js +23 -6
  261. package/dist/utils/struct-tree.d.ts +44 -0
  262. package/dist/utils/struct-tree.js +129 -0
  263. package/dist/utils/ttf-parser.d.ts +134 -2
  264. package/dist/utils/ttf-parser.js +873 -50
  265. package/dist/utils/ttf-subsetter.d.ts +1 -1
  266. package/dist/utils/ttf-subsetter.js +40 -42
  267. package/dist/utils/ua-xmp.d.ts +9 -0
  268. package/dist/utils/ua-xmp.js +32 -0
  269. package/dist/utils/utf8-to-windows1252-encoder.d.ts +6 -0
  270. package/dist/utils/utf8-to-windows1252-encoder.js +11 -4
  271. package/dist/utils/woff.d.ts +10 -0
  272. package/dist/utils/woff.js +116 -0
  273. package/dist/validators/element-validator.d.ts +2 -2
  274. package/dist/validators/element-validator.js +31 -26
  275. package/package.json +22 -2
@@ -1,48 +1,54 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RectangleRenderer = void 0;
13
- const renderer_registry_1 = require("../utils/renderer-registry");
14
- class RectangleRenderer {
15
- static render(rectangleElement, objectManager) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const { x, y, width, height, children, color, backgroundColor, borderWidth, radius, sideBorders, } = rectangleElement.getProps();
18
- const h = height;
19
- const nodes = [];
20
- if (sideBorders) {
21
- // Per-side borders: a fill-only box (no stroke), then a line per present side
22
- // (sharp corners). This is what lets cells draw grid lines.
23
- if (backgroundColor) {
24
- nodes.push({ type: "rect", x, y, width, height: h, strokeWidth: 0, fill: backgroundColor });
25
- }
26
- nodes.push(...RectangleRenderer.sideLines(x, y, width, h, borderWidth, sideBorders));
1
+ import { RendererRegistry } from "../utils/renderer-registry.js";
2
+ import { isGradientInput, resolveGradient } from "../api/gradient.js";
3
+ export class RectangleRenderer {
4
+ static async render(rectangleElement, objectManager) {
5
+ const { x, y, width, height, children, color, backgroundColor, borderWidth, radius, sideBorders, overflow, } = rectangleElement.getProps();
6
+ const h = height;
7
+ const nodes = [];
8
+ // A gradient is written box-relative (an angle and stops); this is the first place the box is
9
+ // known, so it is resolved into the absolute page coordinates the IR wants.
10
+ const fill = backgroundColor !== undefined && isGradientInput(backgroundColor)
11
+ ? resolveGradient(backgroundColor, x, y, width, h)
12
+ : backgroundColor;
13
+ if (sideBorders) {
14
+ // Per-side borders: a fill-only box (no stroke), then a line per present side
15
+ // (sharp corners). This is what lets cells draw grid lines.
16
+ if (backgroundColor) {
17
+ nodes.push({ type: "rect", x, y, width, height: h, strokeWidth: 0, fill });
27
18
  }
28
- else {
29
- // The box itself becomes a display-list primitive. A background means a filled box;
30
- // otherwise it is stroked only. (Unchanged path - byte-identical.)
31
- const node = Object.assign(Object.assign({ type: "rect", x,
32
- y,
33
- width, height: h, stroke: color, strokeWidth: borderWidth }, (backgroundColor ? { fill: backgroundColor } : {})), (radius ? { radius } : {}));
34
- nodes.push(node);
19
+ nodes.push(...RectangleRenderer.sideLines(x, y, width, h, borderWidth, sideBorders));
20
+ }
21
+ else {
22
+ // The box itself becomes a display-list primitive. A background means a filled box;
23
+ // otherwise it is stroked only. (Unchanged path - byte-identical.)
24
+ const node = {
25
+ type: "rect",
26
+ x,
27
+ y,
28
+ width,
29
+ height: h,
30
+ stroke: color,
31
+ strokeWidth: borderWidth,
32
+ ...(fill ? { fill } : {}),
33
+ ...(radius ? { radius } : {}),
34
+ };
35
+ nodes.push(node);
36
+ }
37
+ // Children follow the box (Rectangle is also a container). With overflow: "hidden" they are
38
+ // wrapped in a clip to the (rounded) box rect, so a Positioned child is cropped at the edge
39
+ // instead of spilling over. Default "visible" emits no clip - byte-identical.
40
+ const clip = overflow === "hidden";
41
+ if (clip) {
42
+ nodes.push({ type: "clip-push", x, y, width, height: h, ...(radius ? { radius } : {}) });
43
+ }
44
+ if (children)
45
+ for (const child of children) {
46
+ const renderer = RendererRegistry.getRenderer(child);
47
+ nodes.push(...(await renderer(child, objectManager)));
35
48
  }
36
- // Children follow the box (Rectangle is also a container).
37
- if (children)
38
- for (const child of children) {
39
- const renderer = renderer_registry_1.RendererRegistry.getRenderer(child);
40
- if (renderer) {
41
- nodes.push(...(yield renderer(child, objectManager)));
42
- }
43
- }
44
- return nodes;
45
- });
49
+ if (clip)
50
+ nodes.push({ type: "clip-pop" });
51
+ return nodes;
46
52
  }
47
53
  /** One `line` node per present side, along the box edges (top-left coordinates). */
48
54
  static sideLines(x, y, width, height, strokeWidth, sides) {
@@ -58,4 +64,3 @@ class RectangleRenderer {
58
64
  return lines;
59
65
  }
60
66
  }
61
- exports.RectangleRenderer = RectangleRenderer;
@@ -1,6 +1,6 @@
1
- import { PDFObjectManager } from "../utils/pdf-object-manager";
2
- import { RepeatingHeaderElement } from "../elements/layout/repeating-header-element";
3
- import { IRNode } from "../ir/display-list";
1
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
2
+ import { RepeatingHeaderElement } from "../elements/layout/repeating-header-element.js";
3
+ import { IRNode } from "../ir/display-list.js";
4
4
  export declare class RepeatingHeaderRenderer {
5
5
  static render(element: RepeatingHeaderElement, objectManager: PDFObjectManager): Promise<IRNode[]>;
6
6
  }
@@ -1,28 +1,12 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RepeatingHeaderRenderer = void 0;
13
- const renderer_registry_1 = require("../utils/renderer-registry");
14
- class RepeatingHeaderRenderer {
15
- static render(element, objectManager) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const { header, body } = element.getProps();
18
- const nodes = [];
19
- for (const child of [header, body]) {
20
- const renderer = renderer_registry_1.RendererRegistry.getRenderer(child);
21
- if (renderer)
22
- nodes.push(...(yield renderer(child, objectManager)));
23
- }
24
- return nodes;
25
- });
1
+ import { RendererRegistry } from "../utils/renderer-registry.js";
2
+ export class RepeatingHeaderRenderer {
3
+ static async render(element, objectManager) {
4
+ const { header, body } = element.getProps();
5
+ const nodes = [];
6
+ for (const child of [header, body]) {
7
+ const renderer = RendererRegistry.getRenderer(child);
8
+ nodes.push(...(await renderer(child, objectManager)));
9
+ }
10
+ return nodes;
26
11
  }
27
12
  }
28
- exports.RepeatingHeaderRenderer = RepeatingHeaderRenderer;
@@ -0,0 +1,7 @@
1
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
2
+ import { RotatedElement } from "../elements/layout/rotated-element.js";
3
+ import { RotatedBoxElement } from "../elements/layout/rotated-box-element.js";
4
+ import { IRNode } from "../ir/display-list.js";
5
+ export declare class RotatedRenderer {
6
+ static render(element: RotatedElement | RotatedBoxElement, objectManager: PDFObjectManager): Promise<IRNode[]>;
7
+ }
@@ -0,0 +1,29 @@
1
+ import { RendererRegistry } from "../utils/renderer-registry.js";
2
+ export class RotatedRenderer {
3
+ // Both `Rotated` (paint-only) and `RotatedBox` (layout-aware quarter-turns) expose the same
4
+ // `{ angle, child, x, y, width, height }` and rotate the child around the box center - shared here.
5
+ static async render(element, objectManager) {
6
+ const { angle, child, x, y, width, height } = element.getProps();
7
+ // Rotate around the box CENTER, in the engine's top-left coordinates (the IR->backend seam flips
8
+ // the matrix to PDF space per page). A positive angle reads clockwise on the page.
9
+ const cx = x + width / 2;
10
+ const cy = y + height / 2;
11
+ const theta = (angle * Math.PI) / 180;
12
+ const cos = Math.cos(theta);
13
+ const sin = Math.sin(theta);
14
+ // M = T(cx,cy) · R(theta) · T(-cx,-cy) as a PDF cm [a,b,c,d,e,f]: the linear part is the rotation,
15
+ // the translation keeps the center fixed.
16
+ const matrix = [
17
+ cos,
18
+ sin,
19
+ -sin,
20
+ cos,
21
+ cx - cos * cx + sin * cy,
22
+ cy - sin * cx - cos * cy,
23
+ ];
24
+ const renderer = RendererRegistry.getRenderer(child);
25
+ const childNodes = await renderer(child, objectManager);
26
+ // Wrap the child's drawing between a push (apply the matrix) and a pop (restore).
27
+ return [{ type: "transform-push", matrix }, ...childNodes, { type: "transform-pop" }];
28
+ }
29
+ }
@@ -1,6 +1,6 @@
1
- import { PDFObjectManager } from "../utils/pdf-object-manager";
2
- import { RowElement } from "../elements/row-element";
3
- import { IRNode } from "../ir/display-list";
1
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
2
+ import { RowElement } from "../elements/row-element.js";
3
+ import { IRNode } from "../ir/display-list.js";
4
4
  export declare class RowRenderer {
5
5
  static render(rowElement: RowElement, objectManager: PDFObjectManager): Promise<IRNode[]>;
6
6
  }
@@ -1,30 +1,13 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RowRenderer = void 0;
13
- const renderer_registry_1 = require("../utils/renderer-registry");
14
- class RowRenderer {
15
- static render(rowElement, objectManager) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const { children } = rowElement.getProps();
18
- const nodes = [];
19
- if (children)
20
- for (const child of children) {
21
- const renderer = renderer_registry_1.RendererRegistry.getRenderer(child);
22
- if (renderer) {
23
- nodes.push(...(yield renderer(child, objectManager)));
24
- }
25
- }
26
- return nodes;
27
- });
1
+ import { RendererRegistry } from "../utils/renderer-registry.js";
2
+ export class RowRenderer {
3
+ static async render(rowElement, objectManager) {
4
+ const { children } = rowElement.getProps();
5
+ const nodes = [];
6
+ if (children)
7
+ for (const child of children) {
8
+ const renderer = RendererRegistry.getRenderer(child);
9
+ nodes.push(...(await renderer(child, objectManager)));
10
+ }
11
+ return nodes;
28
12
  }
29
13
  }
30
- exports.RowRenderer = RowRenderer;
@@ -0,0 +1,10 @@
1
+ import { StructGroup } from "../elements/layout/struct-group.js";
2
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
3
+ import { IRNode } from "../ir/display-list.js";
4
+ /**
5
+ * Renders a StructGroup: opens its structure element, renders the child under it, closes it. With accessible
6
+ * tagging off it is fully transparent - just the child's IR.
7
+ */
8
+ export declare class StructGroupRenderer {
9
+ static render(group: StructGroup, objectManager: PDFObjectManager): Promise<IRNode[]>;
10
+ }
@@ -0,0 +1,24 @@
1
+ import { RendererRegistry } from "../utils/renderer-registry.js";
2
+ /**
3
+ * Renders a StructGroup: opens its structure element, renders the child under it, closes it. With accessible
4
+ * tagging off it is fully transparent - just the child's IR.
5
+ */
6
+ export class StructGroupRenderer {
7
+ static async render(group, objectManager) {
8
+ const { role, child } = group.getProps();
9
+ const renderChild = async () => {
10
+ const renderer = RendererRegistry.getRenderer(child);
11
+ return renderer(child, objectManager);
12
+ };
13
+ if (!objectManager.struct.enabled)
14
+ return renderChild();
15
+ const key = objectManager.struct.openElement(group.structId, role);
16
+ objectManager.struct.push(key);
17
+ try {
18
+ return await renderChild();
19
+ }
20
+ finally {
21
+ objectManager.struct.pop(); // keep the parent stack balanced even if a child throws
22
+ }
23
+ }
24
+ }
@@ -1,9 +1,13 @@
1
- import { TextElement, TextSegment } from "../elements/text-element";
2
- import { FontStyle, PDFObjectManager } from "../utils/pdf-object-manager";
3
- import type { FontMetrics } from "../utils/font-metrics";
4
- import { IRNode } from "../ir/display-list";
1
+ import { TextElement, TextSegment } from "../elements/text-element.js";
2
+ import { FontStyle, PDFObjectManager } from "../utils/pdf-object-manager.js";
3
+ import type { FontMetrics } from "../utils/font-metrics.js";
4
+ import { IRNode } from "../ir/display-list.js";
5
+ import { type LineOptions, TextOverflow } from "../text/line-breaker.js";
5
6
  export declare class TextRenderer {
6
- static calculateTextHeight(content: string | TextSegment[], fontSize: number, fontFamily: string, fontStyle: FontStyle, objectManager: FontMetrics, maxWidth: number): number;
7
+ static calculateTextHeight(content: string | TextSegment[], fontSize: number, fontFamily: string, fontStyle: FontStyle, objectManager: FontMetrics, maxWidth: number, maxLines?: number, overflow?: TextOverflow, lineHeight?: number, letterSpacing?: number, lineOptions?: LineOptions): number;
7
8
  static render(textElement: TextElement, objectManager: PDFObjectManager): Promise<IRNode[]>;
9
+ private static _expandColorGlyphs;
10
+ private static _glyphToPath;
11
+ private static _toGradient;
8
12
  private static _buildRuns;
9
13
  }