@jasy/pdf 1.0.0-alpha.2 → 1.0.0-alpha.3

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 (139) hide show
  1. package/README.md +3 -3
  2. package/dist/api/args.d.ts +1 -1
  3. package/dist/api/args.js +2 -5
  4. package/dist/api/color.d.ts +4 -4
  5. package/dist/api/color.js +11 -17
  6. package/dist/api/content.d.ts +8 -8
  7. package/dist/api/content.js +23 -24
  8. package/dist/api/descriptor.d.ts +2 -2
  9. package/dist/api/descriptor.js +75 -31
  10. package/dist/api/index.d.ts +8 -8
  11. package/dist/api/index.js +8 -24
  12. package/dist/api/insets.js +4 -8
  13. package/dist/api/layout.d.ts +18 -16
  14. package/dist/api/layout.js +41 -52
  15. package/dist/api/structure.d.ts +60 -13
  16. package/dist/api/structure.js +132 -88
  17. package/dist/api/table.d.ts +5 -5
  18. package/dist/api/table.js +28 -24
  19. package/dist/api/text.d.ts +27 -2
  20. package/dist/api/text.js +45 -27
  21. package/dist/assets/font-data.d.ts +2 -0
  22. package/dist/assets/font-data.js +6 -0
  23. package/dist/assets/font-data.ts +7 -0
  24. package/dist/common/color.js +1 -5
  25. package/dist/constants/page-sizes.js +3 -6
  26. package/dist/constants/pdf-parts.js +1 -4
  27. package/dist/elements/container-element.d.ts +4 -4
  28. package/dist/elements/container-element.js +9 -13
  29. package/dist/elements/image-element.d.ts +18 -2
  30. package/dist/elements/image-element.js +81 -105
  31. package/dist/elements/index.d.ts +12 -11
  32. package/dist/elements/index.js +12 -29
  33. package/dist/elements/layout/default-text-style-element.d.ts +30 -0
  34. package/dist/elements/layout/default-text-style-element.js +47 -0
  35. package/dist/elements/layout/deferred-element.d.ts +3 -3
  36. package/dist/elements/layout/deferred-element.js +4 -8
  37. package/dist/elements/layout/expanded-element.d.ts +3 -3
  38. package/dist/elements/layout/expanded-element.js +10 -14
  39. package/dist/elements/layout/padding-element.d.ts +3 -3
  40. package/dist/elements/layout/padding-element.js +9 -14
  41. package/dist/elements/layout/positioned-element.d.ts +17 -4
  42. package/dist/elements/layout/positioned-element.js +29 -25
  43. package/dist/elements/layout/repeating-header-element.d.ts +3 -3
  44. package/dist/elements/layout/repeating-header-element.js +8 -12
  45. package/dist/elements/layout/sized-container-element.d.ts +2 -2
  46. package/dist/elements/layout/sized-container-element.js +6 -11
  47. package/dist/elements/line-element.d.ts +3 -3
  48. package/dist/elements/line-element.js +5 -10
  49. package/dist/elements/page-element.d.ts +8 -6
  50. package/dist/elements/page-element.js +20 -23
  51. package/dist/elements/pdf-document-element.d.ts +10 -4
  52. package/dist/elements/pdf-document-element.js +11 -10
  53. package/dist/elements/pdf-element.d.ts +12 -3
  54. package/dist/elements/pdf-element.js +10 -19
  55. package/dist/elements/rectangle-element.d.ts +5 -5
  56. package/dist/elements/rectangle-element.js +19 -25
  57. package/dist/elements/row-element.d.ts +3 -3
  58. package/dist/elements/row-element.js +7 -11
  59. package/dist/elements/text-element.d.ts +37 -11
  60. package/dist/elements/text-element.js +64 -39
  61. package/dist/index.d.ts +3 -3
  62. package/dist/index.js +3 -19
  63. package/dist/ir/display-list.d.ts +4 -2
  64. package/dist/ir/display-list.js +1 -2
  65. package/dist/layout/box-constraints.js +2 -6
  66. package/dist/layout/fragmentation.d.ts +8 -1
  67. package/dist/layout/fragmentation.js +22 -10
  68. package/dist/platform/browser-fs.d.ts +2 -0
  69. package/dist/platform/browser-fs.js +9 -0
  70. package/dist/platform/browser-image.d.ts +5 -0
  71. package/dist/platform/browser-image.js +13 -0
  72. package/dist/platform/node-fs.d.ts +2 -0
  73. package/dist/platform/node-fs.js +10 -0
  74. package/dist/platform/node-image.d.ts +5 -0
  75. package/dist/platform/node-image.js +9 -0
  76. package/dist/renderer/container-renderer.d.ts +3 -3
  77. package/dist/renderer/container-renderer.js +12 -27
  78. package/dist/renderer/default-text-style-renderer.d.ts +6 -0
  79. package/dist/renderer/default-text-style-renderer.js +10 -0
  80. package/dist/renderer/deferred-renderer.d.ts +3 -3
  81. package/dist/renderer/deferred-renderer.js +8 -23
  82. package/dist/renderer/expanded-renderer.d.ts +3 -3
  83. package/dist/renderer/expanded-renderer.js +6 -21
  84. package/dist/renderer/image-renderer.d.ts +3 -3
  85. package/dist/renderer/image-renderer.js +77 -75
  86. package/dist/renderer/index.d.ts +10 -10
  87. package/dist/renderer/index.js +10 -26
  88. package/dist/renderer/line-renderer.d.ts +3 -3
  89. package/dist/renderer/line-renderer.js +13 -28
  90. package/dist/renderer/padding-renderer.d.ts +3 -3
  91. package/dist/renderer/padding-renderer.js +6 -21
  92. package/dist/renderer/page-renderer.d.ts +2 -2
  93. package/dist/renderer/page-renderer.js +61 -77
  94. package/dist/renderer/pdf-backend.d.ts +2 -2
  95. package/dist/renderer/pdf-backend.js +21 -19
  96. package/dist/renderer/pdf-config.js +4 -7
  97. package/dist/renderer/pdf-document-class.d.ts +5 -5
  98. package/dist/renderer/pdf-document-class.js +24 -41
  99. package/dist/renderer/pdf-document-renderer.d.ts +3 -3
  100. package/dist/renderer/pdf-document-renderer.js +71 -85
  101. package/dist/renderer/pdf-renderer.d.ts +2 -2
  102. package/dist/renderer/pdf-renderer.js +83 -93
  103. package/dist/renderer/positioned-renderer.d.ts +3 -3
  104. package/dist/renderer/positioned-renderer.js +8 -23
  105. package/dist/renderer/rectangle-renderer.d.ts +3 -3
  106. package/dist/renderer/rectangle-renderer.js +45 -52
  107. package/dist/renderer/repeating-header-renderer.d.ts +3 -3
  108. package/dist/renderer/repeating-header-renderer.js +11 -26
  109. package/dist/renderer/row-renderer.d.ts +3 -3
  110. package/dist/renderer/row-renderer.js +12 -27
  111. package/dist/renderer/text-renderer.d.ts +6 -5
  112. package/dist/renderer/text-renderer.js +33 -42
  113. package/dist/text/line-breaker.d.ts +8 -5
  114. package/dist/text/line-breaker.js +67 -16
  115. package/dist/text/text-style.d.ts +25 -0
  116. package/dist/text/text-style.js +29 -0
  117. package/dist/utils/afm-parser.js +3 -13
  118. package/dist/utils/bytes.d.ts +24 -0
  119. package/dist/utils/bytes.js +76 -0
  120. package/dist/utils/flex-layout.d.ts +2 -2
  121. package/dist/utils/flex-layout.js +15 -20
  122. package/dist/utils/font-metrics.d.ts +1 -1
  123. package/dist/utils/font-metrics.js +1 -2
  124. package/dist/utils/font-path.js +3 -6
  125. package/dist/utils/image-helper.d.ts +6 -5
  126. package/dist/utils/image-helper.js +101 -111
  127. package/dist/utils/md5.d.ts +4 -0
  128. package/dist/utils/md5.js +80 -0
  129. package/dist/utils/pdf-object-manager.d.ts +10 -6
  130. package/dist/utils/pdf-object-manager.js +89 -94
  131. package/dist/utils/renderer-registry.js +1 -5
  132. package/dist/utils/ttf-parser.d.ts +2 -2
  133. package/dist/utils/ttf-parser.js +32 -36
  134. package/dist/utils/ttf-subsetter.d.ts +1 -1
  135. package/dist/utils/ttf-subsetter.js +40 -42
  136. package/dist/utils/utf8-to-windows1252-encoder.js +1 -4
  137. package/dist/validators/element-validator.d.ts +2 -2
  138. package/dist/validators/element-validator.js +9 -13
  139. package/package.json +14 -2
@@ -1,81 +1,65 @@
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.PageRenderer = void 0;
13
- const page_sizes_1 = require("../constants/page-sizes");
14
- const renderer_registry_1 = require("../utils/renderer-registry");
15
- const pdf_config_1 = require("./pdf-config");
16
- const pdf_backend_1 = require("./pdf-backend");
17
- class PageRenderer {
18
- static render(page, objectManager) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- var _a;
21
- const { children, config, header, footer } = page.getProps();
22
- // Header (top band) and footer (bottom band) sit around the body and repeat on every
23
- // physical page; they are placed by `PageElement.calculateLayout` / the page driver.
24
- const renderables = [...(header ? [header] : []), ...children, ...(footer ? [footer] : [])];
25
- // Page geometry (also the MediaBox below). Needed up front because flipping the
26
- // display list to PDF coordinates uses the page height. config is fully resolved
27
- // by the layout pass; fall back to the document default rather than asserting.
28
- let [width, height] = page_sizes_1.pageFormats[(_a = config === null || config === void 0 ? void 0 : config.pageSize) !== null && _a !== void 0 ? _a : page_sizes_1.PageSize.A4];
29
- if ((config === null || config === void 0 ? void 0 : config.orientation) === pdf_config_1.Orientation.landscape) {
30
- [width, height] = [height, width];
1
+ import { pageFormats, PageSize } from "../constants/page-sizes.js";
2
+ import { RendererRegistry } from "../utils/renderer-registry.js";
3
+ import { Orientation } from "./pdf-config.js";
4
+ import { PdfBackend } from "./pdf-backend.js";
5
+ export class PageRenderer {
6
+ static async render(page, objectManager) {
7
+ const { children, config, header, footer } = page.getProps();
8
+ // Header (top band) and footer (bottom band) sit around the body and repeat on every
9
+ // physical page; they are placed by `PageElement.calculateLayout` / the page driver.
10
+ const renderables = [...(header ? [header] : []), ...children, ...(footer ? [footer] : [])];
11
+ // Page geometry (also the MediaBox below). Needed up front because flipping the
12
+ // display list to PDF coordinates uses the page height. config is fully resolved
13
+ // by the layout pass; fall back to the document default rather than asserting.
14
+ let [width, height] = config?.customSize ?? pageFormats[config?.pageSize ?? PageSize.A4];
15
+ if (config?.orientation === Orientation.landscape) {
16
+ [width, height] = [height, width];
17
+ }
18
+ // Collect the whole page as a display list (top-left coordinates), flip it to PDF
19
+ // coordinates at this one seam, then serialize once. Serializing registers the
20
+ // fonts/images used below, so it must run before the resource section.
21
+ const nodes = [];
22
+ for (const element of renderables) {
23
+ const renderer = RendererRegistry.getRenderer(element);
24
+ if (renderer) {
25
+ nodes.push(...(await renderer(element, objectManager)));
31
26
  }
32
- // Collect the whole page as a display list (top-left coordinates), flip it to PDF
33
- // coordinates at this one seam, then serialize once. Serializing registers the
34
- // fonts/images used below, so it must run before the resource section.
35
- const nodes = [];
36
- for (const element of renderables) {
37
- const renderer = renderer_registry_1.RendererRegistry.getRenderer(element);
38
- if (renderer) {
39
- nodes.push(...(yield renderer(element, objectManager)));
40
- }
41
- }
42
- const pageContent = pdf_backend_1.PdfBackend.serialize(pdf_backend_1.PdfBackend.flipY(nodes, height), objectManager);
43
- // Add the page content as a new object (FlateDecode-compressed when enabled). The /Length is
44
- // computed inside, with an explicit EOL before `endstream` (PDF/A clause 6.1.7.1).
45
- const contentObjectNumber = objectManager.addContentStream(pageContent);
46
- // Get the parent object number dynamically (linked with the page object)
47
- const parentObjectNumber = objectManager.getParentObjectNumber(); // Get parent object number
48
- // Page object with MediaBox
49
- // - Get all fonts and add it to the page (reference)
50
- objectManager.registerFont("Helvetica");
51
- const fontReferences = [];
52
- objectManager.getAllFontsRaw().forEach((value, _key) => {
53
- const fontRef = `/F${value.fontIndex} ${value.resourceIndex} 0 R`;
54
- fontReferences.push(fontRef);
55
- });
56
- // - Get all images and add it to the page (reference)
57
- const imageReferences = [];
58
- objectManager.getAllImagesRaw().forEach((value) => {
59
- const imageRef = `/IM${value} ${value} 0 R`;
60
- imageReferences.push(imageRef);
61
- });
62
- const imageCode = imageReferences.length > 0
63
- ? "/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /XObject <<\n" +
64
- imageReferences.join("\n") +
65
- "\n>>\n"
66
- : "";
67
- // - Transparency (ExtGState) references, registered during serialize above
68
- const extGStateReferences = [];
69
- objectManager.getAllExtGStatesRaw().forEach((objectNumber, name) => {
70
- extGStateReferences.push(`/${name} ${objectNumber} 0 R`);
71
- });
72
- const extGStateCode = extGStateReferences.length > 0
73
- ? "/ExtGState <<\n" + extGStateReferences.join("\n") + "\n>>\n"
74
- : "";
75
- const pageObject = `<< /Type /Page /Parent ${parentObjectNumber} 0 R /Contents ${contentObjectNumber} 0 R /Resources <<\n/Font <<\n${fontReferences.join("\n")}\n>>\n${imageCode}${extGStateCode}>>\n/MediaBox [0 0 ${width} ${height}] >>`;
76
- // Add page as new object and return the page number
77
- return objectManager.addObject(pageObject);
27
+ }
28
+ const pageContent = PdfBackend.serialize(PdfBackend.flipY(nodes, height), objectManager);
29
+ // Add the page content as a new object (FlateDecode-compressed when enabled). The /Length is
30
+ // computed inside, with an explicit EOL before `endstream` (PDF/A clause 6.1.7.1).
31
+ const contentObjectNumber = objectManager.addContentStream(pageContent);
32
+ // Get the parent object number dynamically (linked with the page object)
33
+ const parentObjectNumber = objectManager.getParentObjectNumber(); // Get parent object number
34
+ // Page object with MediaBox
35
+ // - Get all fonts and add it to the page (reference)
36
+ objectManager.registerFont("Helvetica");
37
+ const fontReferences = [];
38
+ objectManager.getAllFontsRaw().forEach((value, _key) => {
39
+ const fontRef = `/F${value.fontIndex} ${value.resourceIndex} 0 R`;
40
+ fontReferences.push(fontRef);
41
+ });
42
+ // - Get all images and add it to the page (reference)
43
+ const imageReferences = [];
44
+ objectManager.getAllImagesRaw().forEach((value) => {
45
+ const imageRef = `/IM${value} ${value} 0 R`;
46
+ imageReferences.push(imageRef);
47
+ });
48
+ const imageCode = imageReferences.length > 0
49
+ ? "/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /XObject <<\n" +
50
+ imageReferences.join("\n") +
51
+ "\n>>\n"
52
+ : "";
53
+ // - Transparency (ExtGState) references, registered during serialize above
54
+ const extGStateReferences = [];
55
+ objectManager.getAllExtGStatesRaw().forEach((objectNumber, name) => {
56
+ extGStateReferences.push(`/${name} ${objectNumber} 0 R`);
78
57
  });
58
+ const extGStateCode = extGStateReferences.length > 0
59
+ ? "/ExtGState <<\n" + extGStateReferences.join("\n") + "\n>>\n"
60
+ : "";
61
+ const pageObject = `<< /Type /Page /Parent ${parentObjectNumber} 0 R /Contents ${contentObjectNumber} 0 R /Resources <<\n/Font <<\n${fontReferences.join("\n")}\n>>\n${imageCode}${extGStateCode}>>\n/MediaBox [0 0 ${width} ${height}] >>`;
62
+ // Add page as new object and return the page number
63
+ return objectManager.addObject(pageObject);
79
64
  }
80
65
  }
81
- exports.PageRenderer = PageRenderer;
@@ -1,5 +1,5 @@
1
- import { IRNode } from "../ir/display-list";
2
- import { PDFObjectManager } from "../utils/pdf-object-manager";
1
+ import { IRNode } from "../ir/display-list.js";
2
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
3
3
  /**
4
4
  * PDF backend - turns display-list primitives into content-stream operators.
5
5
  *
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PdfBackend = void 0;
4
1
  /**
5
2
  * PDF backend - turns display-list primitives into content-stream operators.
6
3
  *
@@ -9,7 +6,7 @@ exports.PdfBackend = void 0;
9
6
  * emitted inline by the per-element renderers, so output stays byte-identical while
10
7
  * the renderers are migrated onto the IR one at a time.
11
8
  */
12
- class PdfBackend {
9
+ export class PdfBackend {
13
10
  /**
14
11
  * Flip a display list from the engine's top-left origin (y grows downward) to PDF's
15
12
  * bottom-left origin (y grows upward). This is the ONE place the Y axis is flipped -
@@ -21,23 +18,30 @@ class PdfBackend {
21
18
  return nodes.map((node) => {
22
19
  switch (node.type) {
23
20
  case "rect":
24
- return Object.assign(Object.assign({}, node), { y: pageHeight - node.y - node.height });
21
+ return { ...node, y: pageHeight - node.y - node.height };
25
22
  case "line":
26
- return Object.assign(Object.assign({}, node), { y1: pageHeight - node.y1, y2: pageHeight - node.y2 });
23
+ return {
24
+ ...node,
25
+ y1: pageHeight - node.y1,
26
+ y2: pageHeight - node.y2,
27
+ };
27
28
  case "text":
28
29
  // node.y is the baseline measured from the page top; flip it directly.
29
- return Object.assign(Object.assign({}, node), { y: pageHeight - node.y });
30
+ return { ...node, y: pageHeight - node.y };
30
31
  case "image": {
31
32
  // Flip the placement box (and the clip frame, if any) around its bottom edge.
32
- const flipped = Object.assign(Object.assign({}, node), { y: pageHeight - node.y - node.height });
33
+ const flipped = { ...node, y: pageHeight - node.y - node.height };
33
34
  if (node.clip) {
34
- flipped.clip = Object.assign(Object.assign({}, node.clip), { y: pageHeight - node.clip.y - node.clip.height });
35
+ flipped.clip = {
36
+ ...node.clip,
37
+ y: pageHeight - node.clip.y - node.clip.height,
38
+ };
35
39
  }
36
40
  return flipped;
37
41
  }
38
42
  case "clip-push":
39
43
  // Flip the clip rect around its bottom edge, like a rect.
40
- return Object.assign(Object.assign({}, node), { y: pageHeight - node.y - node.height });
44
+ return { ...node, y: pageHeight - node.y - node.height };
41
45
  case "clip-pop":
42
46
  return node;
43
47
  default: {
@@ -100,7 +104,6 @@ class PdfBackend {
100
104
  * `om` is used only by primitives that allocate PDF resources (images, fonts).
101
105
  */
102
106
  static serializeNode(node, om) {
103
- var _a, _b, _c, _d, _e, _f;
104
107
  switch (node.type) {
105
108
  case "line":
106
109
  // q/Q isolates the graphics state; "[] 0 d" resets the dash pattern to solid.
@@ -114,10 +117,10 @@ class PdfBackend {
114
117
  `S\n` +
115
118
  `Q\n`);
116
119
  case "rect": {
117
- // Stroke only with a stroke colour AND a positive width - a 0-width border means
120
+ // Stroke only with a stroke color AND a positive width - a 0-width border means
118
121
  // "no border" (e.g. a filled box with no outline). Nothing to paint at all (no
119
122
  // fill, no border) draws nothing. Paint: B = fill+stroke, f = fill, S = stroke.
120
- const doStroke = !!node.stroke && ((_a = node.strokeWidth) !== null && _a !== void 0 ? _a : 0) > 0;
123
+ const doStroke = !!node.stroke && (node.strokeWidth ?? 0) > 0;
121
124
  if (!node.fill && !doStroke)
122
125
  return "";
123
126
  let ops = "";
@@ -129,13 +132,13 @@ class PdfBackend {
129
132
  const paint = node.fill ? (doStroke ? "B" : "f") : "S";
130
133
  // Rounded corners emit a Bézier path; sharp corners keep the plain `re`
131
134
  // (byte-identical when no radius is set).
132
- const path = ((_b = node.radius) !== null && _b !== void 0 ? _b : 0) > 0
135
+ const path = (node.radius ?? 0) > 0
133
136
  ? PdfBackend.roundedRectPath(node.x, node.y, node.width, node.height, node.radius)
134
137
  : `${node.x} ${node.y} ${node.width} ${node.height} re`;
135
138
  const body = ops + `${path} ${paint}\n`;
136
139
  // Transparency needs an isolating q/Q so the state does not leak; opaque rects
137
140
  // keep their bare operators (byte-identical).
138
- const gs = PdfBackend.alphaPrefix(om, (_d = (_c = node.fill) === null || _c === void 0 ? void 0 : _c.getAlpha()) !== null && _d !== void 0 ? _d : 1, doStroke ? node.stroke.getAlpha() : 1);
141
+ const gs = PdfBackend.alphaPrefix(om, node.fill?.getAlpha() ?? 1, doStroke ? node.stroke.getAlpha() : 1);
139
142
  return gs ? `q\n${gs}${body}Q\n` : body;
140
143
  }
141
144
  case "text": {
@@ -166,14 +169,14 @@ class PdfBackend {
166
169
  case "image": {
167
170
  // The backend owns PDF resource creation: register the XObject (using the
168
171
  // source pixel dimensions) and then place it with a scaling matrix.
169
- const ref = om.registerImage(node.intrinsicWidth, node.intrinsicHeight, node.imageType, node.data);
172
+ const ref = om.registerImage(node.intrinsicWidth, node.intrinsicHeight, node.imageType, node.data, node.smask);
170
173
  const draw = `q\n${node.width} 0 0 ${node.height} ${node.x} ${node.y} cm\n` + `/IM${ref} Do\nQ\n`;
171
174
  if (!node.clip)
172
175
  return draw;
173
176
  // Clip to the frame (re … W n); rounded when a radius is set. The rectangular
174
177
  // path is byte-identical to before.
175
178
  const c = node.clip;
176
- const clipPath = ((_e = node.radius) !== null && _e !== void 0 ? _e : 0) > 0
179
+ const clipPath = (node.radius ?? 0) > 0
177
180
  ? PdfBackend.roundedRectPath(c.x, c.y, c.width, c.height, node.radius)
178
181
  : `${c.x} ${c.y} ${c.width} ${c.height} re `;
179
182
  return `q\n${clipPath}\nW n \n` + draw + `Q\n`;
@@ -181,7 +184,7 @@ class PdfBackend {
181
184
  case "clip-push": {
182
185
  // Save the graphics state and intersect the clip with this (rounded) rect. Everything
183
186
  // drawn until the matching clip-pop is cropped to it.
184
- const path = ((_f = node.radius) !== null && _f !== void 0 ? _f : 0) > 0
187
+ const path = (node.radius ?? 0) > 0
185
188
  ? PdfBackend.roundedRectPath(node.x, node.y, node.width, node.height, node.radius)
186
189
  : `${node.x} ${node.y} ${node.width} ${node.height} re`;
187
190
  return `q\n${path}\nW n\n`;
@@ -196,4 +199,3 @@ class PdfBackend {
196
199
  }
197
200
  }
198
201
  }
199
- exports.PdfBackend = PdfBackend;
@@ -1,17 +1,14 @@
1
- "use strict";
2
1
  // Leaf module: no imports, so it can never sit inside an import cycle. The page/color
3
2
  // enums live here because they are runtime values used across modules that DO form
4
3
  // cycles (object manager <-> document <-> elements); importing them from a cyclic
5
4
  // module snapshots them as `undefined` under some load orders.
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ColorMode = exports.Orientation = void 0;
8
- var Orientation;
5
+ export var Orientation;
9
6
  (function (Orientation) {
10
7
  Orientation["portrait"] = "PORTRAIT";
11
8
  Orientation["landscape"] = "LANDSCAPE";
12
- })(Orientation || (exports.Orientation = Orientation = {}));
13
- var ColorMode;
9
+ })(Orientation || (Orientation = {}));
10
+ export var ColorMode;
14
11
  (function (ColorMode) {
15
12
  ColorMode["color"] = "COLOR";
16
13
  ColorMode["grayscale"] = "GRAYSCALE";
17
- })(ColorMode || (exports.ColorMode = ColorMode = {}));
14
+ })(ColorMode || (ColorMode = {}));
@@ -1,8 +1,8 @@
1
- import { PageSize } from "../constants/page-sizes";
2
- import { PDFDocumentElement } from "../elements";
3
- import { FontStyle, PDFObjectManager } from "../utils/pdf-object-manager";
4
- import { ColorMode, Orientation } from "./pdf-config";
5
- export { ColorMode, Orientation } from "./pdf-config";
1
+ import { PageSize } from "../constants/page-sizes.js";
2
+ import { PDFDocumentElement } from "../elements/index.js";
3
+ import { FontStyle, PDFObjectManager } from "../utils/pdf-object-manager.js";
4
+ import { ColorMode, Orientation } from "./pdf-config.js";
5
+ export { ColorMode, Orientation } from "./pdf-config.js";
6
6
  export interface Margin {
7
7
  left: number;
8
8
  top: number;
@@ -1,90 +1,76 @@
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.PDFDocument = exports.Orientation = exports.ColorMode = void 0;
13
- const pdf_object_manager_1 = require("../utils/pdf-object-manager");
14
- const pdf_renderer_1 = require("./pdf-renderer");
1
+ import { FontStyle, PDFObjectManager } from "../utils/pdf-object-manager.js";
2
+ import { PDFRenderer } from "./pdf-renderer.js";
15
3
  // Re-exported so existing `../renderer` consumers keep importing these from here.
16
- var pdf_config_1 = require("./pdf-config");
17
- Object.defineProperty(exports, "ColorMode", { enumerable: true, get: function () { return pdf_config_1.ColorMode; } });
18
- Object.defineProperty(exports, "Orientation", { enumerable: true, get: function () { return pdf_config_1.Orientation; } });
19
- class PDFDocument {
4
+ export { ColorMode, Orientation } from "./pdf-config.js";
5
+ export class PDFDocument {
20
6
  //#region Helper
21
7
  // Method to register all standard fonts
22
8
  registerStandardFonts(objectManager) {
23
9
  const standardFonts = [
24
10
  {
25
11
  fontName: "Helvetica",
26
- fontStyle: pdf_object_manager_1.FontStyle.Normal,
12
+ fontStyle: FontStyle.Normal,
27
13
  fullName: "Helvetica",
28
14
  },
29
15
  {
30
16
  fontName: "Helvetica",
31
- fontStyle: pdf_object_manager_1.FontStyle.Bold,
17
+ fontStyle: FontStyle.Bold,
32
18
  fullName: "Helvetica-Bold",
33
19
  },
34
20
  {
35
21
  fontName: "Helvetica",
36
- fontStyle: pdf_object_manager_1.FontStyle.Italic,
22
+ fontStyle: FontStyle.Italic,
37
23
  fullName: "Helvetica-Oblique",
38
24
  },
39
25
  {
40
26
  fontName: "Helvetica",
41
- fontStyle: pdf_object_manager_1.FontStyle.BoldItalic,
27
+ fontStyle: FontStyle.BoldItalic,
42
28
  fullName: "Helvetica-BoldOblique",
43
29
  },
44
- { fontName: "Courier", fontStyle: pdf_object_manager_1.FontStyle.Normal, fullName: "Courier" },
30
+ { fontName: "Courier", fontStyle: FontStyle.Normal, fullName: "Courier" },
45
31
  {
46
32
  fontName: "Courier",
47
- fontStyle: pdf_object_manager_1.FontStyle.Bold,
33
+ fontStyle: FontStyle.Bold,
48
34
  fullName: "Courier-Bold",
49
35
  },
50
36
  {
51
37
  fontName: "Courier",
52
- fontStyle: pdf_object_manager_1.FontStyle.Italic,
38
+ fontStyle: FontStyle.Italic,
53
39
  fullName: "Courier-Oblique",
54
40
  },
55
41
  {
56
42
  fontName: "Courier",
57
- fontStyle: pdf_object_manager_1.FontStyle.BoldItalic,
43
+ fontStyle: FontStyle.BoldItalic,
58
44
  fullName: "Courier-BoldOblique",
59
45
  },
60
46
  {
61
47
  fontName: "Times-Roman",
62
- fontStyle: pdf_object_manager_1.FontStyle.Normal,
48
+ fontStyle: FontStyle.Normal,
63
49
  fullName: "Times-Roman",
64
50
  },
65
51
  {
66
52
  fontName: "Times-Roman",
67
- fontStyle: pdf_object_manager_1.FontStyle.Bold,
53
+ fontStyle: FontStyle.Bold,
68
54
  fullName: "Times-Bold",
69
55
  },
70
56
  {
71
57
  fontName: "Times-Roman",
72
- fontStyle: pdf_object_manager_1.FontStyle.Italic,
58
+ fontStyle: FontStyle.Italic,
73
59
  fullName: "Times-Italic",
74
60
  },
75
61
  {
76
62
  fontName: "Times-Roman",
77
- fontStyle: pdf_object_manager_1.FontStyle.BoldItalic,
63
+ fontStyle: FontStyle.BoldItalic,
78
64
  fullName: "Times-BoldItalic",
79
65
  },
80
66
  {
81
67
  fontName: "Symbol",
82
- fontStyle: pdf_object_manager_1.FontStyle.Normal,
68
+ fontStyle: FontStyle.Normal,
83
69
  fullName: "Symbol",
84
70
  },
85
71
  {
86
72
  fontName: "ITC Zapf Dingbats",
87
- fontStyle: pdf_object_manager_1.FontStyle.Normal,
73
+ fontStyle: FontStyle.Normal,
88
74
  fullName: "ZapfDingbats",
89
75
  },
90
76
  ];
@@ -94,10 +80,10 @@ class PDFDocument {
94
80
  constructor(config) {
95
81
  // One object manager per document instance - no global singleton. Threaded
96
82
  // explicitly into the renderer.
97
- this._objectManager = new pdf_object_manager_1.PDFObjectManager();
83
+ this._objectManager = new PDFObjectManager();
98
84
  // Add all standard font families - unless the document is PDF/A, which forbids non-embedded
99
85
  // fonts (the caller then supplies embedded fonts for every name it uses).
100
- if ((config === null || config === void 0 ? void 0 : config.registerStandardFonts) !== false) {
86
+ if (config?.registerStandardFonts !== false) {
101
87
  this.registerStandardFonts(this._objectManager);
102
88
  }
103
89
  if (config)
@@ -107,12 +93,9 @@ class PDFDocument {
107
93
  return this._objectManager;
108
94
  }
109
95
  beforeRenderer() { }
110
- static render() {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- const instance = new this();
113
- instance.child = instance.build();
114
- return yield pdf_renderer_1.PDFRenderer.render(instance.child, instance._objectManager);
115
- });
96
+ static async render() {
97
+ const instance = new this();
98
+ instance.child = instance.build();
99
+ return await PDFRenderer.render(instance.child, instance._objectManager);
116
100
  }
117
101
  }
118
- exports.PDFDocument = PDFDocument;
@@ -1,6 +1,6 @@
1
- import { PDFDocumentElement } from "../elements/pdf-document-element";
2
- import { LayoutContext } from "../elements/pdf-element";
3
- import { PDFObjectManager } from "../utils/pdf-object-manager";
1
+ import { PDFDocumentElement } from "../elements/pdf-document-element.js";
2
+ import { LayoutContext } from "../elements/pdf-element.js";
3
+ import { PDFObjectManager } from "../utils/pdf-object-manager.js";
4
4
  export declare class PDFDocumentRenderer {
5
5
  static render(document: PDFDocumentElement, objectManager: PDFObjectManager, ctx: LayoutContext): Promise<number>;
6
6
  /**