@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.
- package/LICENSE +21 -0
- package/README.md +35 -21
- package/dist/api/args.d.ts +1 -1
- package/dist/api/args.js +2 -5
- package/dist/api/color.d.ts +4 -4
- package/dist/api/color.js +11 -17
- package/dist/api/content.d.ts +20 -13
- package/dist/api/content.js +44 -29
- package/dist/api/descriptor.d.ts +2 -2
- package/dist/api/descriptor.js +121 -31
- package/dist/api/dimension.d.ts +76 -0
- package/dist/api/dimension.js +43 -0
- package/dist/api/font-url.d.ts +28 -0
- package/dist/api/font-url.js +134 -0
- package/dist/api/forms.d.ts +347 -0
- package/dist/api/forms.js +189 -0
- package/dist/api/gradient.d.ts +53 -0
- package/dist/api/gradient.js +97 -0
- package/dist/api/index.d.ts +13 -8
- package/dist/api/index.js +13 -24
- package/dist/api/insets.d.ts +19 -12
- package/dist/api/insets.js +19 -12
- package/dist/api/layout.d.ts +149 -25
- package/dist/api/layout.js +182 -51
- package/dist/api/page-builder.d.ts +40 -0
- package/dist/api/page-builder.js +44 -0
- package/dist/api/structure.d.ts +100 -13
- package/dist/api/structure.js +179 -88
- package/dist/api/table.d.ts +5 -5
- package/dist/api/table.js +38 -26
- package/dist/api/text.d.ts +90 -4
- package/dist/api/text.js +116 -31
- package/dist/assets/font-data.d.ts +2 -0
- package/dist/assets/font-data.js +21 -0
- package/dist/assets/font-data.ts +37 -0
- package/dist/common/color.js +1 -5
- package/dist/constants/page-sizes.js +3 -6
- package/dist/constants/pdf-parts.js +1 -4
- package/dist/crypto/legacy-handler.d.ts +43 -0
- package/dist/crypto/legacy-handler.js +145 -0
- package/dist/crypto/security-handler.d.ts +62 -0
- package/dist/crypto/security-handler.js +155 -0
- package/dist/crypto/webcrypto.d.ts +11 -0
- package/dist/crypto/webcrypto.js +62 -0
- package/dist/edit/acroform-reader.d.ts +70 -0
- package/dist/edit/acroform-reader.js +126 -0
- package/dist/edit/appearance.d.ts +47 -0
- package/dist/edit/appearance.js +171 -0
- package/dist/edit/document.d.ts +145 -0
- package/dist/edit/document.js +642 -0
- package/dist/edit/fill.d.ts +65 -0
- package/dist/edit/fill.js +424 -0
- package/dist/edit/flatten.d.ts +54 -0
- package/dist/edit/flatten.js +462 -0
- package/dist/edit/index.d.ts +20 -0
- package/dist/edit/index.js +18 -0
- package/dist/edit/lexer.d.ts +30 -0
- package/dist/edit/lexer.js +285 -0
- package/dist/edit/objects.d.ts +68 -0
- package/dist/edit/objects.js +83 -0
- package/dist/edit/writer.d.ts +60 -0
- package/dist/edit/writer.js +283 -0
- package/dist/elements/container-element.d.ts +50 -5
- package/dist/elements/container-element.js +100 -39
- package/dist/elements/forms/checkbox-element.d.ts +51 -0
- package/dist/elements/forms/checkbox-element.js +48 -0
- package/dist/elements/forms/choice-element.d.ts +53 -0
- package/dist/elements/forms/choice-element.js +59 -0
- package/dist/elements/forms/push-button-element.d.ts +56 -0
- package/dist/elements/forms/push-button-element.js +49 -0
- package/dist/elements/forms/radio-element.d.ts +52 -0
- package/dist/elements/forms/radio-element.js +49 -0
- package/dist/elements/forms/signature-element.d.ts +54 -0
- package/dist/elements/forms/signature-element.js +47 -0
- package/dist/elements/forms/text-field-element.d.ts +61 -0
- package/dist/elements/forms/text-field-element.js +54 -0
- package/dist/elements/image-element.d.ts +58 -6
- package/dist/elements/image-element.js +145 -111
- package/dist/elements/index.d.ts +26 -10
- package/dist/elements/index.js +26 -28
- package/dist/elements/layout/anchor-element.d.ts +23 -0
- package/dist/elements/layout/anchor-element.js +27 -0
- package/dist/elements/layout/bookmark-element.d.ts +27 -0
- package/dist/elements/layout/bookmark-element.js +30 -0
- package/dist/elements/layout/default-text-style-element.d.ts +30 -0
- package/dist/elements/layout/default-text-style-element.js +47 -0
- package/dist/elements/layout/deferred-element.d.ts +3 -3
- package/dist/elements/layout/deferred-element.js +4 -8
- package/dist/elements/layout/expanded-element.d.ts +6 -4
- package/dist/elements/layout/expanded-element.js +22 -17
- package/dist/elements/layout/keep-together-element.d.ts +42 -0
- package/dist/elements/layout/keep-together-element.js +85 -0
- package/dist/elements/layout/link-element.d.ts +33 -0
- package/dist/elements/layout/link-element.js +39 -0
- package/dist/elements/layout/padding-element.d.ts +10 -5
- package/dist/elements/layout/padding-element.js +25 -16
- package/dist/elements/layout/page-break-element.d.ts +17 -0
- package/dist/elements/layout/page-break-element.js +24 -0
- package/dist/elements/layout/page-builder-element.d.ts +32 -0
- package/dist/elements/layout/page-builder-element.js +45 -0
- package/dist/elements/layout/positioned-element.d.ts +47 -0
- package/dist/elements/layout/positioned-element.js +73 -0
- package/dist/elements/layout/repeating-header-element.d.ts +3 -3
- package/dist/elements/layout/repeating-header-element.js +8 -12
- package/dist/elements/layout/rotated-box-element.d.ts +35 -0
- package/dist/elements/layout/rotated-box-element.js +54 -0
- package/dist/elements/layout/rotated-element.d.ts +32 -0
- package/dist/elements/layout/rotated-element.js +41 -0
- package/dist/elements/layout/sized-container-element.d.ts +2 -2
- package/dist/elements/layout/sized-container-element.js +6 -11
- package/dist/elements/layout/struct-group.d.ts +28 -0
- package/dist/elements/layout/struct-group.js +42 -0
- package/dist/elements/line-element.d.ts +3 -3
- package/dist/elements/line-element.js +5 -10
- package/dist/elements/page-element.d.ts +26 -6
- package/dist/elements/page-element.js +72 -27
- package/dist/elements/pdf-document-element.d.ts +10 -4
- package/dist/elements/pdf-document-element.js +11 -10
- package/dist/elements/pdf-element.d.ts +150 -4
- package/dist/elements/pdf-element.js +138 -20
- package/dist/elements/rectangle-element.d.ts +52 -11
- package/dist/elements/rectangle-element.js +129 -36
- package/dist/elements/row-element.d.ts +45 -4
- package/dist/elements/row-element.js +66 -18
- package/dist/elements/text-element.d.ts +132 -11
- package/dist/elements/text-element.js +206 -56
- package/dist/forms/acroform.d.ts +63 -0
- package/dist/forms/acroform.js +427 -0
- package/dist/forms/appearance.d.ts +58 -0
- package/dist/forms/appearance.js +204 -0
- package/dist/forms/field.d.ts +164 -0
- package/dist/forms/field.js +1 -0
- package/dist/forms/pdf.d.ts +19 -0
- package/dist/forms/pdf.js +28 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -19
- package/dist/ir/display-list.d.ts +197 -8
- package/dist/ir/display-list.js +8 -2
- package/dist/layout/alignment.d.ts +10 -0
- package/dist/layout/alignment.js +6 -0
- package/dist/layout/box-constraints.d.ts +61 -0
- package/dist/layout/box-constraints.js +88 -6
- package/dist/layout/collect-images.d.ts +9 -0
- package/dist/layout/collect-images.js +34 -0
- package/dist/layout/fragmentation.d.ts +20 -1
- package/dist/layout/fragmentation.js +74 -18
- package/dist/layout/insets.d.ts +28 -0
- package/dist/layout/insets.js +20 -0
- package/dist/platform/browser-fs.d.ts +2 -0
- package/dist/platform/browser-fs.js +9 -0
- package/dist/platform/browser-image.d.ts +5 -0
- package/dist/platform/browser-image.js +13 -0
- package/dist/platform/node-fs.d.ts +2 -0
- package/dist/platform/node-fs.js +10 -0
- package/dist/platform/node-image.d.ts +5 -0
- package/dist/platform/node-image.js +9 -0
- package/dist/renderer/anchor-renderer.d.ts +6 -0
- package/dist/renderer/anchor-renderer.js +11 -0
- package/dist/renderer/bookmark-renderer.d.ts +6 -0
- package/dist/renderer/bookmark-renderer.js +11 -0
- package/dist/renderer/container-renderer.d.ts +3 -3
- package/dist/renderer/container-renderer.js +11 -28
- package/dist/renderer/default-text-style-renderer.d.ts +6 -0
- package/dist/renderer/default-text-style-renderer.js +10 -0
- package/dist/renderer/deferred-renderer.d.ts +3 -3
- package/dist/renderer/deferred-renderer.js +8 -23
- package/dist/renderer/emoji-image.d.ts +9 -0
- package/dist/renderer/emoji-image.js +68 -0
- package/dist/renderer/expanded-renderer.d.ts +3 -3
- package/dist/renderer/expanded-renderer.js +6 -21
- package/dist/renderer/form-field-renderer.d.ts +20 -0
- package/dist/renderer/form-field-renderer.js +12 -0
- package/dist/renderer/image-renderer.d.ts +4 -4
- package/dist/renderer/image-renderer.js +86 -75
- package/dist/renderer/index.d.ts +10 -10
- package/dist/renderer/index.js +10 -26
- package/dist/renderer/keep-together-renderer.d.ts +10 -0
- package/dist/renderer/keep-together-renderer.js +12 -0
- package/dist/renderer/line-renderer.d.ts +3 -3
- package/dist/renderer/line-renderer.js +13 -28
- package/dist/renderer/link-renderer.d.ts +6 -0
- package/dist/renderer/link-renderer.js +11 -0
- package/dist/renderer/padding-renderer.d.ts +3 -3
- package/dist/renderer/padding-renderer.js +6 -21
- package/dist/renderer/page-break-renderer.d.ts +14 -0
- package/dist/renderer/page-break-renderer.js +15 -0
- package/dist/renderer/page-builder-renderer.d.ts +6 -0
- package/dist/renderer/page-builder-renderer.js +11 -0
- package/dist/renderer/page-renderer.d.ts +2 -2
- package/dist/renderer/page-renderer.js +115 -77
- package/dist/renderer/pdf-backend.d.ts +31 -4
- package/dist/renderer/pdf-backend.js +287 -49
- package/dist/renderer/pdf-config.js +4 -7
- package/dist/renderer/pdf-document-class.d.ts +5 -5
- package/dist/renderer/pdf-document-class.js +27 -41
- package/dist/renderer/pdf-document-renderer.d.ts +19 -10
- package/dist/renderer/pdf-document-renderer.js +135 -91
- package/dist/renderer/pdf-renderer.d.ts +2 -2
- package/dist/renderer/pdf-renderer.js +165 -90
- package/dist/renderer/positioned-renderer.d.ts +6 -0
- package/dist/renderer/positioned-renderer.js +10 -0
- package/dist/renderer/rectangle-renderer.d.ts +3 -3
- package/dist/renderer/rectangle-renderer.js +49 -44
- package/dist/renderer/repeating-header-renderer.d.ts +3 -3
- package/dist/renderer/repeating-header-renderer.js +10 -26
- package/dist/renderer/rotated-renderer.d.ts +7 -0
- package/dist/renderer/rotated-renderer.js +29 -0
- package/dist/renderer/row-renderer.d.ts +3 -3
- package/dist/renderer/row-renderer.js +11 -28
- package/dist/renderer/struct-group-renderer.d.ts +10 -0
- package/dist/renderer/struct-group-renderer.js +24 -0
- package/dist/renderer/text-renderer.d.ts +9 -5
- package/dist/renderer/text-renderer.js +437 -89
- package/dist/text/advance.d.ts +34 -0
- package/dist/text/advance.js +45 -0
- package/dist/text/arabic.d.ts +20 -0
- package/dist/text/arabic.js +101 -0
- package/dist/text/bidi.d.ts +33 -0
- package/dist/text/bidi.js +94 -0
- package/dist/text/emoji-codepoints.d.ts +1 -0
- package/dist/text/emoji-codepoints.js +29 -0
- package/dist/text/font-fallback.d.ts +25 -0
- package/dist/text/font-fallback.js +38 -0
- package/dist/text/line-breaker.d.ts +50 -12
- package/dist/text/line-breaker.js +158 -37
- package/dist/text/line-metrics.d.ts +49 -0
- package/dist/text/line-metrics.js +57 -0
- package/dist/text/orphans-widows.d.ts +27 -0
- package/dist/text/orphans-widows.js +53 -0
- package/dist/text/shape.d.ts +29 -0
- package/dist/text/shape.js +67 -0
- package/dist/text/text-decoration.d.ts +50 -0
- package/dist/text/text-decoration.js +62 -0
- package/dist/text/text-style.d.ts +60 -0
- package/dist/text/text-style.js +79 -0
- package/dist/utils/afm-parser.d.ts +34 -0
- package/dist/utils/afm-parser.js +76 -17
- package/dist/utils/bytes.d.ts +24 -0
- package/dist/utils/bytes.js +76 -0
- package/dist/utils/dest-registry.d.ts +22 -0
- package/dist/utils/dest-registry.js +32 -0
- package/dist/utils/flex-layout.d.ts +36 -9
- package/dist/utils/flex-layout.js +207 -30
- package/dist/utils/font-metrics.d.ts +20 -1
- package/dist/utils/font-metrics.js +1 -2
- package/dist/utils/font-path.js +3 -6
- package/dist/utils/gsub.d.ts +36 -0
- package/dist/utils/gsub.js +178 -0
- package/dist/utils/image-helper.d.ts +6 -5
- package/dist/utils/image-helper.js +101 -111
- package/dist/utils/inflate.d.ts +16 -0
- package/dist/utils/inflate.js +52 -0
- package/dist/utils/md5.d.ts +4 -0
- package/dist/utils/md5.js +79 -0
- package/dist/utils/outline.d.ts +21 -0
- package/dist/utils/outline.js +79 -0
- package/dist/utils/pdf-object-manager.d.ts +110 -8
- package/dist/utils/pdf-object-manager.js +583 -141
- package/dist/utils/renderer-registry.d.ts +13 -1
- package/dist/utils/renderer-registry.js +23 -6
- package/dist/utils/struct-tree.d.ts +44 -0
- package/dist/utils/struct-tree.js +129 -0
- package/dist/utils/ttf-parser.d.ts +134 -2
- package/dist/utils/ttf-parser.js +873 -50
- package/dist/utils/ttf-subsetter.d.ts +1 -1
- package/dist/utils/ttf-subsetter.js +40 -42
- package/dist/utils/ua-xmp.d.ts +9 -0
- package/dist/utils/ua-xmp.js +32 -0
- package/dist/utils/utf8-to-windows1252-encoder.d.ts +6 -0
- package/dist/utils/utf8-to-windows1252-encoder.js +11 -4
- package/dist/utils/woff.d.ts +10 -0
- package/dist/utils/woff.js +116 -0
- package/dist/validators/element-validator.d.ts +2 -2
- package/dist/validators/element-validator.js +31 -26
- package/package.json +22 -2
|
@@ -1,140 +1,174 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
var
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.ImageElement = exports.CustomLocalImage = exports.CustomImage = exports.BoxFit = void 0;
|
|
46
|
-
const image_helper_1 = require("../utils/image-helper");
|
|
47
|
-
const pdf_element_1 = require("./pdf-element");
|
|
48
|
-
var BoxFit;
|
|
1
|
+
import { getImageDimensions } from "../utils/image-helper.js";
|
|
2
|
+
import { latin1FromBytes } from "../utils/bytes.js";
|
|
3
|
+
import { readFileBytesAsync } from "../platform/node-fs.js";
|
|
4
|
+
import { extentSpecs, resolveSize, } from "../layout/box-constraints.js";
|
|
5
|
+
import { SizedPDFElement } from "./pdf-element.js";
|
|
6
|
+
// path.extname without node:path (browser-safe): the substring from the last dot, if it sits after the
|
|
7
|
+
// last slash (so a dot in a directory name does not count). Enough for image file extensions.
|
|
8
|
+
function extname(p) {
|
|
9
|
+
const dot = p.lastIndexOf(".");
|
|
10
|
+
const slash = p.lastIndexOf("/");
|
|
11
|
+
return dot > slash + 1 ? p.slice(dot) : "";
|
|
12
|
+
}
|
|
13
|
+
export var BoxFit;
|
|
49
14
|
(function (BoxFit) {
|
|
50
15
|
BoxFit["none"] = "NONE";
|
|
51
16
|
BoxFit["contain"] = "CONTAIN";
|
|
52
17
|
BoxFit["cover"] = "COVER";
|
|
53
18
|
BoxFit["fill"] = "FILL";
|
|
54
|
-
})(BoxFit || (
|
|
55
|
-
class CustomImage {
|
|
19
|
+
})(BoxFit || (BoxFit = {}));
|
|
20
|
+
export class CustomImage {
|
|
56
21
|
}
|
|
57
|
-
|
|
58
|
-
class CustomLocalImage extends CustomImage {
|
|
22
|
+
export class CustomLocalImage extends CustomImage {
|
|
59
23
|
constructor(imagePath) {
|
|
60
24
|
super();
|
|
61
25
|
this.imagePath = imagePath;
|
|
62
26
|
}
|
|
63
|
-
init() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
27
|
+
async init() {
|
|
28
|
+
if (this.fileBuffer)
|
|
29
|
+
return; // idempotent: the pre-layout size pass and the renderer both call init()
|
|
30
|
+
try {
|
|
31
|
+
// Loading image and convert it to base64
|
|
32
|
+
await this.loadImage(this.imagePath);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("Error loading image:", error);
|
|
36
|
+
}
|
|
73
37
|
}
|
|
74
|
-
getImageType() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
throw new Error(`Unsupported image format: ${ext}`);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
38
|
+
async getImageType() {
|
|
39
|
+
const ext = extname(this.imagePath).toLowerCase();
|
|
40
|
+
switch (ext) {
|
|
41
|
+
case ".jpg":
|
|
42
|
+
case ".jpeg":
|
|
43
|
+
return "DCTDecode"; // For JPEG
|
|
44
|
+
case ".png":
|
|
45
|
+
return "FlateDecode"; // For PNG
|
|
46
|
+
case ".bmp":
|
|
47
|
+
throw new Error("BMP is not directly supported. Please convert to PNG or JPEG.");
|
|
48
|
+
case ".webp":
|
|
49
|
+
throw new Error("WebP is not directly supported. Please convert to PNG or JPEG.");
|
|
50
|
+
default:
|
|
51
|
+
throw new Error(`Unsupported image format: ${ext}`);
|
|
52
|
+
}
|
|
92
53
|
}
|
|
93
|
-
loadImage(imagePath) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this.fileRawData = result.toString("binary");
|
|
100
|
-
return result;
|
|
101
|
-
});
|
|
54
|
+
async loadImage(imagePath) {
|
|
55
|
+
const result = await readFileBytesAsync(imagePath);
|
|
56
|
+
//const result = await convertImageToGrayscaleBuffer(imagePath);
|
|
57
|
+
this.fileBuffer = result;
|
|
58
|
+
this.fileRawData = latin1FromBytes(result);
|
|
59
|
+
return result;
|
|
102
60
|
}
|
|
103
61
|
getFileData() {
|
|
104
62
|
return this.fileRawData;
|
|
105
63
|
}
|
|
106
|
-
getImageDimensions() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
64
|
+
async getImageDimensions() {
|
|
65
|
+
if (this.dims)
|
|
66
|
+
return this.dims; // reuse: the pre-layout size pass and the renderer both ask
|
|
67
|
+
if (!this.fileBuffer) {
|
|
68
|
+
throw new Error("You must first call the `loadAndConvertImage` method");
|
|
69
|
+
}
|
|
70
|
+
this.dims = await getImageDimensions(this.fileBuffer);
|
|
71
|
+
return this.dims;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* An image straight from raw bytes (a browser upload / fetch, no filesystem). The PDF filter is sniffed
|
|
76
|
+
* from the magic bytes: JPEG embeds raw (DCTDecode, no decode step), PNG is decoded to RGB (FlateDecode).
|
|
77
|
+
*/
|
|
78
|
+
export class CustomBytesImage extends CustomImage {
|
|
79
|
+
constructor(bytes) {
|
|
80
|
+
super();
|
|
81
|
+
this.bytes = bytes;
|
|
82
|
+
this.fileRawData = latin1FromBytes(bytes);
|
|
83
|
+
}
|
|
84
|
+
async init() { }
|
|
85
|
+
async getImageType() {
|
|
86
|
+
const b = this.bytes;
|
|
87
|
+
if (b[0] === 0xff && b[1] === 0xd8)
|
|
88
|
+
return "DCTDecode"; // JPEG
|
|
89
|
+
if (b[0] === 0x89 && b[1] === 0x50 && b[2] === 0x4e && b[3] === 0x47)
|
|
90
|
+
return "FlateDecode"; // PNG
|
|
91
|
+
throw new Error("Unsupported image bytes (only JPEG and PNG are supported).");
|
|
92
|
+
}
|
|
93
|
+
getFileData() {
|
|
94
|
+
return this.fileRawData;
|
|
95
|
+
}
|
|
96
|
+
async getImageDimensions() {
|
|
97
|
+
if (!this.dims)
|
|
98
|
+
this.dims = await getImageDimensions(this.bytes); // reuse across pre-pass + render
|
|
99
|
+
return this.dims;
|
|
116
100
|
}
|
|
117
101
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
102
|
+
export class ImageElement extends SizedPDFElement {
|
|
103
|
+
constructor({ image, width, height, widthFactor, heightFactor, fit = BoxFit.none, radius, alt, ...sizing }) {
|
|
104
|
+
// Seed this.width/height from the request so getProps() reflects it before layout; calculateLayout
|
|
105
|
+
// then reads `requested` (never the mutated fields) and overwrites these with the laid-out size.
|
|
121
106
|
super({ x: 0, y: 0, width });
|
|
122
107
|
this.image = image;
|
|
123
108
|
this.height = height;
|
|
109
|
+
this.requested = { width, height };
|
|
110
|
+
this.widthFactor = widthFactor;
|
|
111
|
+
this.heightFactor = heightFactor;
|
|
112
|
+
this.sizing = sizing;
|
|
124
113
|
this.fit = fit;
|
|
125
|
-
this.radius = radius
|
|
114
|
+
this.radius = radius ?? 0;
|
|
115
|
+
this.alt = alt;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Loads the image and records its intrinsic pixel size. Runs in the async pre-layout pass (layout
|
|
119
|
+
* itself is synchronous and cannot await jimp) so `calculateLayout` can turn a width-only image
|
|
120
|
+
* into a proportional box. Best-effort: a load failure leaves the size unresolved (the renderer
|
|
121
|
+
* surfaces the real error) and the image just keeps whatever explicit size it was given.
|
|
122
|
+
*/
|
|
123
|
+
async resolveIntrinsicSize() {
|
|
124
|
+
try {
|
|
125
|
+
await this.image.init();
|
|
126
|
+
this.intrinsic = await this.image.getImageDimensions();
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// leave intrinsic undefined - aspect derivation simply doesn't fire
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
relativeSizeFactor(horizontal) {
|
|
133
|
+
return horizontal ? this.widthFactor : this.heightFactor;
|
|
126
134
|
}
|
|
127
135
|
calculateLayout(constraints, offset, _ctx) {
|
|
128
|
-
var _a, _b;
|
|
129
136
|
this.x = offset.x;
|
|
130
137
|
this.y = offset.y;
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
this.
|
|
138
|
+
// Relative sizing: a fixed size or a fraction of the offered box (fraction only in a bounded axis).
|
|
139
|
+
// Read from `requested` (not this.width/height, which we overwrite below) so every pass re-resolves.
|
|
140
|
+
const specs = extentSpecs({
|
|
141
|
+
...this.sizing,
|
|
142
|
+
width: this.requested.width,
|
|
143
|
+
height: this.requested.height,
|
|
144
|
+
widthFactor: this.widthFactor,
|
|
145
|
+
heightFactor: this.heightFactor,
|
|
146
|
+
});
|
|
147
|
+
// An explicit `aspectRatio` wins over the image's own, as it does in CSS - and only it may size a
|
|
148
|
+
// box with NEITHER axis pinned. Left to the intrinsic ratio that would change what an unsized image
|
|
149
|
+
// has always done here (fill both axes and let `fit` sort it out).
|
|
150
|
+
const resolved = resolveSize(specs.width, specs.height, this.sizing.aspectRatio, constraints);
|
|
151
|
+
let w = resolved.width;
|
|
152
|
+
let h = resolved.height;
|
|
153
|
+
const bounds = resolved.constraints;
|
|
154
|
+
// Aspect auto-size: when exactly ONE axis is pinned, derive the other from the intrinsic ratio
|
|
155
|
+
// (CSS `width: 50%; height: auto`). Only fires once the pre-pass resolved the pixel size.
|
|
156
|
+
if (this.sizing.aspectRatio === undefined &&
|
|
157
|
+
this.intrinsic &&
|
|
158
|
+
this.intrinsic.width > 0 &&
|
|
159
|
+
this.intrinsic.height > 0) {
|
|
160
|
+
const ratio = this.intrinsic.width / this.intrinsic.height;
|
|
161
|
+
if (w !== undefined && h === undefined)
|
|
162
|
+
h = bounds.constrainHeight(w / ratio);
|
|
163
|
+
else if (h !== undefined && w === undefined)
|
|
164
|
+
w = bounds.constrainWidth(h * ratio);
|
|
165
|
+
}
|
|
166
|
+
// Fall back to the prior behavior for an unpinned axis: a bounded axis fills, otherwise keep the
|
|
167
|
+
// requested fixed size (or undefined). Read from `requested`, never the mutated this.width/height.
|
|
168
|
+
this.width = w ?? (bounds.hasBoundedWidth ? bounds.maxWidth : this.requested.width);
|
|
169
|
+
this.height = h ?? (bounds.hasBoundedHeight ? bounds.maxHeight : this.requested.height);
|
|
136
170
|
// Top-left coordinates; the fit logic (renderer) and the Y-flip (seam) run later.
|
|
137
|
-
return { width:
|
|
171
|
+
return { width: this.width ?? 0, height: this.height ?? 0 };
|
|
138
172
|
}
|
|
139
173
|
getProps() {
|
|
140
174
|
return {
|
|
@@ -145,7 +179,7 @@ class ImageElement extends pdf_element_1.SizedPDFElement {
|
|
|
145
179
|
image: this.image,
|
|
146
180
|
fit: this.fit,
|
|
147
181
|
radius: this.radius,
|
|
182
|
+
alt: this.alt,
|
|
148
183
|
};
|
|
149
184
|
}
|
|
150
185
|
}
|
|
151
|
-
exports.ImageElement = ImageElement;
|
package/dist/elements/index.d.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
export { PDFElement } from "./pdf-element";
|
|
2
|
-
export * from "./text-element";
|
|
3
|
-
export * from "./pdf-document-element";
|
|
4
|
-
export * from "./page-element";
|
|
5
|
-
export * from "./rectangle-element";
|
|
6
|
-
export * from "./image-element";
|
|
7
|
-
export * from "./layout/expanded-element";
|
|
8
|
-
export * from "./layout/padding-element";
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./
|
|
1
|
+
export { PDFElement } from "./pdf-element.js";
|
|
2
|
+
export * from "./text-element.js";
|
|
3
|
+
export * from "./pdf-document-element.js";
|
|
4
|
+
export * from "./page-element.js";
|
|
5
|
+
export * from "./rectangle-element.js";
|
|
6
|
+
export * from "./image-element.js";
|
|
7
|
+
export * from "./layout/expanded-element.js";
|
|
8
|
+
export * from "./layout/padding-element.js";
|
|
9
|
+
export * from "./layout/page-break-element.js";
|
|
10
|
+
export * from "./layout/keep-together-element.js";
|
|
11
|
+
export * from "./forms/text-field-element.js";
|
|
12
|
+
export * from "./forms/checkbox-element.js";
|
|
13
|
+
export * from "./forms/radio-element.js";
|
|
14
|
+
export * from "./forms/choice-element.js";
|
|
15
|
+
export * from "./forms/push-button-element.js";
|
|
16
|
+
export * from "./forms/signature-element.js";
|
|
17
|
+
export * from "./layout/default-text-style-element.js";
|
|
18
|
+
export * from "./layout/positioned-element.js";
|
|
19
|
+
export * from "./layout/link-element.js";
|
|
20
|
+
export * from "./layout/bookmark-element.js";
|
|
21
|
+
export * from "./layout/anchor-element.js";
|
|
22
|
+
export * from "./layout/page-builder-element.js";
|
|
23
|
+
export * from "./layout/rotated-element.js";
|
|
24
|
+
export * from "./layout/rotated-box-element.js";
|
|
25
|
+
export * from "./line-element.js";
|
|
26
|
+
export * from "./row-element.js";
|
package/dist/elements/index.js
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
__exportStar(require("./line-element"), exports);
|
|
28
|
-
__exportStar(require("./row-element"), exports);
|
|
1
|
+
export { PDFElement } from "./pdf-element.js"; // the base element type - public for composing custom layouts
|
|
2
|
+
export * from "./text-element.js";
|
|
3
|
+
export * from "./pdf-document-element.js";
|
|
4
|
+
export * from "./page-element.js";
|
|
5
|
+
export * from "./rectangle-element.js";
|
|
6
|
+
export * from "./image-element.js";
|
|
7
|
+
export * from "./layout/expanded-element.js";
|
|
8
|
+
export * from "./layout/padding-element.js";
|
|
9
|
+
export * from "./layout/page-break-element.js";
|
|
10
|
+
export * from "./layout/keep-together-element.js";
|
|
11
|
+
export * from "./forms/text-field-element.js";
|
|
12
|
+
export * from "./forms/checkbox-element.js";
|
|
13
|
+
export * from "./forms/radio-element.js";
|
|
14
|
+
export * from "./forms/choice-element.js";
|
|
15
|
+
export * from "./forms/push-button-element.js";
|
|
16
|
+
export * from "./forms/signature-element.js";
|
|
17
|
+
export * from "./layout/default-text-style-element.js";
|
|
18
|
+
export * from "./layout/positioned-element.js";
|
|
19
|
+
export * from "./layout/link-element.js";
|
|
20
|
+
export * from "./layout/bookmark-element.js";
|
|
21
|
+
export * from "./layout/anchor-element.js";
|
|
22
|
+
export * from "./layout/page-builder-element.js";
|
|
23
|
+
export * from "./layout/rotated-element.js";
|
|
24
|
+
export * from "./layout/rotated-box-element.js";
|
|
25
|
+
export * from "./line-element.js";
|
|
26
|
+
export * from "./row-element.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PDFElement, LayoutContext } from "../pdf-element.js";
|
|
2
|
+
import { BoxConstraints, Offset, Size } from "../../layout/box-constraints.js";
|
|
3
|
+
/**
|
|
4
|
+
* Marks its child as a named jump target for an internal `Link({ to: name })`. Layout-transparent: it
|
|
5
|
+
* delegates `calculateLayout` to the child and records the child's top, which the renderer turns into an
|
|
6
|
+
* `Anchor` IR node (and PDFRenderer into a /Names /Dests entry). It draws nothing - the child renders
|
|
7
|
+
* exactly as it would on its own.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AnchorElement extends PDFElement {
|
|
10
|
+
private name;
|
|
11
|
+
private child;
|
|
12
|
+
private y;
|
|
13
|
+
constructor({ name, child }: {
|
|
14
|
+
name: string;
|
|
15
|
+
child: PDFElement;
|
|
16
|
+
});
|
|
17
|
+
calculateLayout(constraints: BoxConstraints, offset: Offset, ctx: LayoutContext): Size;
|
|
18
|
+
getProps(): {
|
|
19
|
+
name: string;
|
|
20
|
+
child: PDFElement;
|
|
21
|
+
y: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PDFElement } from "../pdf-element.js";
|
|
2
|
+
/**
|
|
3
|
+
* Marks its child as a named jump target for an internal `Link({ to: name })`. Layout-transparent: it
|
|
4
|
+
* delegates `calculateLayout` to the child and records the child's top, which the renderer turns into an
|
|
5
|
+
* `Anchor` IR node (and PDFRenderer into a /Names /Dests entry). It draws nothing - the child renders
|
|
6
|
+
* exactly as it would on its own.
|
|
7
|
+
*/
|
|
8
|
+
export class AnchorElement extends PDFElement {
|
|
9
|
+
constructor({ name, child }) {
|
|
10
|
+
super();
|
|
11
|
+
this.y = 0;
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.child = child;
|
|
14
|
+
}
|
|
15
|
+
calculateLayout(constraints, offset, ctx) {
|
|
16
|
+
const size = this.child.calculateLayout(constraints, offset, ctx);
|
|
17
|
+
this.y = offset.y; // the child's top - the scroll target for a link that jumps here
|
|
18
|
+
return size;
|
|
19
|
+
}
|
|
20
|
+
getProps() {
|
|
21
|
+
return {
|
|
22
|
+
name: this.name,
|
|
23
|
+
child: this.child,
|
|
24
|
+
y: this.y,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PDFElement, LayoutContext } from "../pdf-element.js";
|
|
2
|
+
import { BoxConstraints, Offset, Size } from "../../layout/box-constraints.js";
|
|
3
|
+
/**
|
|
4
|
+
* Adds a document-outline entry (a bookmark) that jumps to its child. Layout-transparent: it delegates
|
|
5
|
+
* `calculateLayout` to the child and records the child's top, which the renderer turns into an `Outline`
|
|
6
|
+
* IR node (and PDFRenderer into a /Outlines tree entry). `title` is the label shown in the viewer's
|
|
7
|
+
* bookmark panel; `level` (1-based, default 1) nests it under the nearest preceding smaller level. It
|
|
8
|
+
* draws nothing - the child renders exactly as it would without the bookmark.
|
|
9
|
+
*/
|
|
10
|
+
export declare class BookmarkElement extends PDFElement {
|
|
11
|
+
private title;
|
|
12
|
+
private level;
|
|
13
|
+
private child;
|
|
14
|
+
private y;
|
|
15
|
+
constructor({ title, level, child }: {
|
|
16
|
+
title: string;
|
|
17
|
+
level?: number;
|
|
18
|
+
child: PDFElement;
|
|
19
|
+
});
|
|
20
|
+
calculateLayout(constraints: BoxConstraints, offset: Offset, ctx: LayoutContext): Size;
|
|
21
|
+
getProps(): {
|
|
22
|
+
title: string;
|
|
23
|
+
level: number;
|
|
24
|
+
child: PDFElement;
|
|
25
|
+
y: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PDFElement } from "../pdf-element.js";
|
|
2
|
+
/**
|
|
3
|
+
* Adds a document-outline entry (a bookmark) that jumps to its child. Layout-transparent: it delegates
|
|
4
|
+
* `calculateLayout` to the child and records the child's top, which the renderer turns into an `Outline`
|
|
5
|
+
* IR node (and PDFRenderer into a /Outlines tree entry). `title` is the label shown in the viewer's
|
|
6
|
+
* bookmark panel; `level` (1-based, default 1) nests it under the nearest preceding smaller level. It
|
|
7
|
+
* draws nothing - the child renders exactly as it would without the bookmark.
|
|
8
|
+
*/
|
|
9
|
+
export class BookmarkElement extends PDFElement {
|
|
10
|
+
constructor({ title, level = 1, child }) {
|
|
11
|
+
super();
|
|
12
|
+
this.y = 0;
|
|
13
|
+
this.title = title;
|
|
14
|
+
this.level = level;
|
|
15
|
+
this.child = child;
|
|
16
|
+
}
|
|
17
|
+
calculateLayout(constraints, offset, ctx) {
|
|
18
|
+
const size = this.child.calculateLayout(constraints, offset, ctx);
|
|
19
|
+
this.y = offset.y; // the child's top - the scroll target for the bookmark
|
|
20
|
+
return size;
|
|
21
|
+
}
|
|
22
|
+
getProps() {
|
|
23
|
+
return {
|
|
24
|
+
title: this.title,
|
|
25
|
+
level: this.level,
|
|
26
|
+
child: this.child,
|
|
27
|
+
y: this.y,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PDFElement, LayoutContext, WithChild, SizedPDFElement } from "../pdf-element.js";
|
|
2
|
+
import { BoxConstraints, Offset, Size } from "../../layout/box-constraints.js";
|
|
3
|
+
import { Fragmentable, FragmentResult } from "../../layout/fragmentation.js";
|
|
4
|
+
import { ResolvedTextStyle } from "../../text/text-style.js";
|
|
5
|
+
interface DefaultTextStyleParams extends WithChild {
|
|
6
|
+
style: Partial<ResolvedTextStyle>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Provides default text properties (font/size/color/lineHeight/align/weight) to its whole subtree -
|
|
10
|
+
* Flutter's `DefaultTextStyle`. Transparent to layout: the child takes the same constraints, offset
|
|
11
|
+
* and size; only the inherited TextStyle changes. A `Text` below still wins per property, and these
|
|
12
|
+
* overrides layer onto whatever the element already inherited from above.
|
|
13
|
+
*/
|
|
14
|
+
export declare class DefaultTextStyleElement extends SizedPDFElement implements Fragmentable {
|
|
15
|
+
private child;
|
|
16
|
+
private style;
|
|
17
|
+
constructor({ child, style }: DefaultTextStyleParams);
|
|
18
|
+
private childCtx;
|
|
19
|
+
fragment(maxHeight: number, width: number, ctx: LayoutContext): FragmentResult;
|
|
20
|
+
private cloneWithChild;
|
|
21
|
+
calculateLayout(constraints: BoxConstraints, offset: Offset, ctx: LayoutContext): Size;
|
|
22
|
+
getProps(): {
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
width: number | undefined;
|
|
26
|
+
height: number | undefined;
|
|
27
|
+
child: PDFElement;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SizedPDFElement } from "../pdf-element.js";
|
|
2
|
+
import { isFragmentable } from "../../layout/fragmentation.js";
|
|
3
|
+
import { DEFAULT_TEXT_STYLE, mergeTextStyle } from "../../text/text-style.js";
|
|
4
|
+
/**
|
|
5
|
+
* Provides default text properties (font/size/color/lineHeight/align/weight) to its whole subtree -
|
|
6
|
+
* Flutter's `DefaultTextStyle`. Transparent to layout: the child takes the same constraints, offset
|
|
7
|
+
* and size; only the inherited TextStyle changes. A `Text` below still wins per property, and these
|
|
8
|
+
* overrides layer onto whatever the element already inherited from above.
|
|
9
|
+
*/
|
|
10
|
+
export class DefaultTextStyleElement extends SizedPDFElement {
|
|
11
|
+
constructor({ child, style }) {
|
|
12
|
+
super({ x: 0, y: 0 });
|
|
13
|
+
this.child = child;
|
|
14
|
+
this.style = style;
|
|
15
|
+
}
|
|
16
|
+
childCtx(ctx) {
|
|
17
|
+
return {
|
|
18
|
+
...ctx,
|
|
19
|
+
textStyle: mergeTextStyle(ctx.textStyle ?? DEFAULT_TEXT_STYLE, this.style),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
// Transparent to fragmentation too: split the child against the merged context, re-wrapping each
|
|
23
|
+
// half so the remainder on the next page keeps the same defaults.
|
|
24
|
+
fragment(maxHeight, width, ctx) {
|
|
25
|
+
if (!isFragmentable(this.child))
|
|
26
|
+
return { fitted: null, remainder: this };
|
|
27
|
+
const split = this.child.fragment(maxHeight, width, this.childCtx(ctx));
|
|
28
|
+
return {
|
|
29
|
+
fitted: split.fitted ? this.cloneWithChild(split.fitted) : null,
|
|
30
|
+
remainder: split.remainder ? this.cloneWithChild(split.remainder) : null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
cloneWithChild(child) {
|
|
34
|
+
return new DefaultTextStyleElement({ child, style: this.style });
|
|
35
|
+
}
|
|
36
|
+
calculateLayout(constraints, offset, ctx) {
|
|
37
|
+
this.x = offset.x;
|
|
38
|
+
this.y = offset.y;
|
|
39
|
+
const size = this.child.calculateLayout(constraints, offset, this.childCtx(ctx));
|
|
40
|
+
this.width = size.width;
|
|
41
|
+
this.height = size.height;
|
|
42
|
+
return size;
|
|
43
|
+
}
|
|
44
|
+
getProps() {
|
|
45
|
+
return { x: this.x, y: this.y, width: this.width, height: this.height, child: this.child };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BoxConstraints, Offset, Size } from "../../layout/box-constraints";
|
|
2
|
-
import { Fragmentable, FragmentResult } from "../../layout/fragmentation";
|
|
3
|
-
import { LayoutContext, PDFElement } from "../pdf-element";
|
|
1
|
+
import { BoxConstraints, Offset, Size } from "../../layout/box-constraints.js";
|
|
2
|
+
import { Fragmentable, FragmentResult } from "../../layout/fragmentation.js";
|
|
3
|
+
import { LayoutContext, PDFElement } from "../pdf-element.js";
|
|
4
4
|
/**
|
|
5
5
|
* Builds its subtree at layout time via `resolve(ctx)`, so the tree can depend on font
|
|
6
6
|
* metrics (e.g. a Table resolving `"auto"` column widths from cell content). The engine
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.DeferredElement = void 0;
|
|
4
|
-
const fragmentation_1 = require("../../layout/fragmentation");
|
|
5
|
-
const pdf_element_1 = require("../pdf-element");
|
|
1
|
+
import { isFragmentable } from "../../layout/fragmentation.js";
|
|
2
|
+
import { PDFElement } from "../pdf-element.js";
|
|
6
3
|
/**
|
|
7
4
|
* Builds its subtree at layout time via `resolve(ctx)`, so the tree can depend on font
|
|
8
5
|
* metrics (e.g. a Table resolving `"auto"` column widths from cell content). The engine
|
|
9
6
|
* stays table-agnostic - the closure comes from the API layer.
|
|
10
7
|
*/
|
|
11
|
-
class DeferredElement extends
|
|
8
|
+
export class DeferredElement extends PDFElement {
|
|
12
9
|
constructor(resolve) {
|
|
13
10
|
super();
|
|
14
11
|
this.resolve = resolve;
|
|
@@ -22,7 +19,7 @@ class DeferredElement extends pdf_element_1.PDFElement {
|
|
|
22
19
|
}
|
|
23
20
|
fragment(maxHeight, width, ctx) {
|
|
24
21
|
const c = this.build(ctx);
|
|
25
|
-
return
|
|
22
|
+
return isFragmentable(c)
|
|
26
23
|
? c.fragment(maxHeight, width, ctx)
|
|
27
24
|
: { fitted: this, remainder: null };
|
|
28
25
|
}
|
|
@@ -30,4 +27,3 @@ class DeferredElement extends pdf_element_1.PDFElement {
|
|
|
30
27
|
return { composed: this.composed };
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
|
-
exports.DeferredElement = DeferredElement;
|