@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.
- package/README.md +3 -3
- 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 +8 -8
- package/dist/api/content.js +23 -24
- package/dist/api/descriptor.d.ts +2 -2
- package/dist/api/descriptor.js +75 -31
- package/dist/api/index.d.ts +8 -8
- package/dist/api/index.js +8 -24
- package/dist/api/insets.js +4 -8
- package/dist/api/layout.d.ts +18 -16
- package/dist/api/layout.js +41 -52
- package/dist/api/structure.d.ts +60 -13
- package/dist/api/structure.js +132 -88
- package/dist/api/table.d.ts +5 -5
- package/dist/api/table.js +28 -24
- package/dist/api/text.d.ts +27 -2
- package/dist/api/text.js +45 -27
- package/dist/assets/font-data.d.ts +2 -0
- package/dist/assets/font-data.js +6 -0
- package/dist/assets/font-data.ts +7 -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/elements/container-element.d.ts +4 -4
- package/dist/elements/container-element.js +9 -13
- package/dist/elements/image-element.d.ts +18 -2
- package/dist/elements/image-element.js +81 -105
- package/dist/elements/index.d.ts +12 -11
- package/dist/elements/index.js +12 -29
- 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 +3 -3
- package/dist/elements/layout/expanded-element.js +10 -14
- package/dist/elements/layout/padding-element.d.ts +3 -3
- package/dist/elements/layout/padding-element.js +9 -14
- package/dist/elements/layout/positioned-element.d.ts +17 -4
- package/dist/elements/layout/positioned-element.js +29 -25
- 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/sized-container-element.d.ts +2 -2
- package/dist/elements/layout/sized-container-element.js +6 -11
- package/dist/elements/line-element.d.ts +3 -3
- package/dist/elements/line-element.js +5 -10
- package/dist/elements/page-element.d.ts +8 -6
- package/dist/elements/page-element.js +20 -23
- 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 +12 -3
- package/dist/elements/pdf-element.js +10 -19
- package/dist/elements/rectangle-element.d.ts +5 -5
- package/dist/elements/rectangle-element.js +19 -25
- package/dist/elements/row-element.d.ts +3 -3
- package/dist/elements/row-element.js +7 -11
- package/dist/elements/text-element.d.ts +37 -11
- package/dist/elements/text-element.js +64 -39
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -19
- package/dist/ir/display-list.d.ts +4 -2
- package/dist/ir/display-list.js +1 -2
- package/dist/layout/box-constraints.js +2 -6
- package/dist/layout/fragmentation.d.ts +8 -1
- package/dist/layout/fragmentation.js +22 -10
- 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/container-renderer.d.ts +3 -3
- package/dist/renderer/container-renderer.js +12 -27
- 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/expanded-renderer.d.ts +3 -3
- package/dist/renderer/expanded-renderer.js +6 -21
- package/dist/renderer/image-renderer.d.ts +3 -3
- package/dist/renderer/image-renderer.js +77 -75
- package/dist/renderer/index.d.ts +10 -10
- package/dist/renderer/index.js +10 -26
- package/dist/renderer/line-renderer.d.ts +3 -3
- package/dist/renderer/line-renderer.js +13 -28
- package/dist/renderer/padding-renderer.d.ts +3 -3
- package/dist/renderer/padding-renderer.js +6 -21
- package/dist/renderer/page-renderer.d.ts +2 -2
- package/dist/renderer/page-renderer.js +61 -77
- package/dist/renderer/pdf-backend.d.ts +2 -2
- package/dist/renderer/pdf-backend.js +21 -19
- 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 +24 -41
- package/dist/renderer/pdf-document-renderer.d.ts +3 -3
- package/dist/renderer/pdf-document-renderer.js +71 -85
- package/dist/renderer/pdf-renderer.d.ts +2 -2
- package/dist/renderer/pdf-renderer.js +83 -93
- package/dist/renderer/positioned-renderer.d.ts +3 -3
- package/dist/renderer/positioned-renderer.js +8 -23
- package/dist/renderer/rectangle-renderer.d.ts +3 -3
- package/dist/renderer/rectangle-renderer.js +45 -52
- package/dist/renderer/repeating-header-renderer.d.ts +3 -3
- package/dist/renderer/repeating-header-renderer.js +11 -26
- package/dist/renderer/row-renderer.d.ts +3 -3
- package/dist/renderer/row-renderer.js +12 -27
- package/dist/renderer/text-renderer.d.ts +6 -5
- package/dist/renderer/text-renderer.js +33 -42
- package/dist/text/line-breaker.d.ts +8 -5
- package/dist/text/line-breaker.js +67 -16
- package/dist/text/text-style.d.ts +25 -0
- package/dist/text/text-style.js +29 -0
- package/dist/utils/afm-parser.js +3 -13
- package/dist/utils/bytes.d.ts +24 -0
- package/dist/utils/bytes.js +76 -0
- package/dist/utils/flex-layout.d.ts +2 -2
- package/dist/utils/flex-layout.js +15 -20
- package/dist/utils/font-metrics.d.ts +1 -1
- package/dist/utils/font-metrics.js +1 -2
- package/dist/utils/font-path.js +3 -6
- package/dist/utils/image-helper.d.ts +6 -5
- package/dist/utils/image-helper.js +101 -111
- package/dist/utils/md5.d.ts +4 -0
- package/dist/utils/md5.js +80 -0
- package/dist/utils/pdf-object-manager.d.ts +10 -6
- package/dist/utils/pdf-object-manager.js +89 -94
- package/dist/utils/renderer-registry.js +1 -5
- package/dist/utils/ttf-parser.d.ts +2 -2
- package/dist/utils/ttf-parser.js +32 -36
- package/dist/utils/ttf-subsetter.d.ts +1 -1
- package/dist/utils/ttf-subsetter.js +40 -42
- package/dist/utils/utf8-to-windows1252-encoder.js +1 -4
- package/dist/validators/element-validator.d.ts +2 -2
- package/dist/validators/element-validator.js +9 -13
- package/package.json +14 -2
|
@@ -1,81 +1,65 @@
|
|
|
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
|
-
// 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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
21
|
+
return { ...node, y: pageHeight - node.y - node.height };
|
|
25
22
|
case "line":
|
|
26
|
-
return
|
|
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
|
|
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 =
|
|
33
|
+
const flipped = { ...node, y: pageHeight - node.y - node.height };
|
|
33
34
|
if (node.clip) {
|
|
34
|
-
flipped.clip =
|
|
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
|
|
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
|
|
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 && (
|
|
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 = (
|
|
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,
|
|
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 = (
|
|
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 = (
|
|
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
|
-
|
|
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 || (
|
|
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 || (
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
17
|
-
|
|
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:
|
|
12
|
+
fontStyle: FontStyle.Normal,
|
|
27
13
|
fullName: "Helvetica",
|
|
28
14
|
},
|
|
29
15
|
{
|
|
30
16
|
fontName: "Helvetica",
|
|
31
|
-
fontStyle:
|
|
17
|
+
fontStyle: FontStyle.Bold,
|
|
32
18
|
fullName: "Helvetica-Bold",
|
|
33
19
|
},
|
|
34
20
|
{
|
|
35
21
|
fontName: "Helvetica",
|
|
36
|
-
fontStyle:
|
|
22
|
+
fontStyle: FontStyle.Italic,
|
|
37
23
|
fullName: "Helvetica-Oblique",
|
|
38
24
|
},
|
|
39
25
|
{
|
|
40
26
|
fontName: "Helvetica",
|
|
41
|
-
fontStyle:
|
|
27
|
+
fontStyle: FontStyle.BoldItalic,
|
|
42
28
|
fullName: "Helvetica-BoldOblique",
|
|
43
29
|
},
|
|
44
|
-
{ fontName: "Courier", fontStyle:
|
|
30
|
+
{ fontName: "Courier", fontStyle: FontStyle.Normal, fullName: "Courier" },
|
|
45
31
|
{
|
|
46
32
|
fontName: "Courier",
|
|
47
|
-
fontStyle:
|
|
33
|
+
fontStyle: FontStyle.Bold,
|
|
48
34
|
fullName: "Courier-Bold",
|
|
49
35
|
},
|
|
50
36
|
{
|
|
51
37
|
fontName: "Courier",
|
|
52
|
-
fontStyle:
|
|
38
|
+
fontStyle: FontStyle.Italic,
|
|
53
39
|
fullName: "Courier-Oblique",
|
|
54
40
|
},
|
|
55
41
|
{
|
|
56
42
|
fontName: "Courier",
|
|
57
|
-
fontStyle:
|
|
43
|
+
fontStyle: FontStyle.BoldItalic,
|
|
58
44
|
fullName: "Courier-BoldOblique",
|
|
59
45
|
},
|
|
60
46
|
{
|
|
61
47
|
fontName: "Times-Roman",
|
|
62
|
-
fontStyle:
|
|
48
|
+
fontStyle: FontStyle.Normal,
|
|
63
49
|
fullName: "Times-Roman",
|
|
64
50
|
},
|
|
65
51
|
{
|
|
66
52
|
fontName: "Times-Roman",
|
|
67
|
-
fontStyle:
|
|
53
|
+
fontStyle: FontStyle.Bold,
|
|
68
54
|
fullName: "Times-Bold",
|
|
69
55
|
},
|
|
70
56
|
{
|
|
71
57
|
fontName: "Times-Roman",
|
|
72
|
-
fontStyle:
|
|
58
|
+
fontStyle: FontStyle.Italic,
|
|
73
59
|
fullName: "Times-Italic",
|
|
74
60
|
},
|
|
75
61
|
{
|
|
76
62
|
fontName: "Times-Roman",
|
|
77
|
-
fontStyle:
|
|
63
|
+
fontStyle: FontStyle.BoldItalic,
|
|
78
64
|
fullName: "Times-BoldItalic",
|
|
79
65
|
},
|
|
80
66
|
{
|
|
81
67
|
fontName: "Symbol",
|
|
82
|
-
fontStyle:
|
|
68
|
+
fontStyle: FontStyle.Normal,
|
|
83
69
|
fullName: "Symbol",
|
|
84
70
|
},
|
|
85
71
|
{
|
|
86
72
|
fontName: "ITC Zapf Dingbats",
|
|
87
|
-
fontStyle:
|
|
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
|
|
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 (
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
/**
|