@jasy/pdf 1.0.0-alpha.1 → 1.0.0-alpha.11
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 +107 -13
- package/dist/api/structure.js +187 -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 +139 -11
- package/dist/elements/text-element.js +234 -57
- 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/glyph-coverage.d.ts +15 -0
- package/dist/text/glyph-coverage.js +77 -0
- package/dist/text/line-breaker.d.ts +50 -12
- package/dist/text/line-breaker.js +200 -54
- 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/text/whitespace.d.ts +4 -0
- package/dist/text/whitespace.js +43 -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 +26 -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 +127 -8
- package/dist/utils/pdf-object-manager.js +615 -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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// A PDF literal string escape (same rule as elsewhere): backslash first, then the string delimiters.
|
|
2
|
+
const num = (n) => Number(n.toFixed(2));
|
|
3
|
+
/**
|
|
4
|
+
* Builds the PDF document outline (`/Outlines`) - the viewer's bookmark panel. Entries are collected
|
|
5
|
+
* flat in reading order with a 1-based `level`; `finalize` nests each entry under the nearest preceding
|
|
6
|
+
* entry of a smaller level (so level 2s hang under the last level 1), emits the outline objects and
|
|
7
|
+
* returns the catalog addition `/Outlines N 0 R`. A no-op returning "" when nothing was added, so a
|
|
8
|
+
* document without bookmarks stays byte-identical.
|
|
9
|
+
*/
|
|
10
|
+
export class OutlineBuilder {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.entries = [];
|
|
13
|
+
}
|
|
14
|
+
add(entry) {
|
|
15
|
+
this.entries.push(entry);
|
|
16
|
+
}
|
|
17
|
+
get isEmpty() {
|
|
18
|
+
return this.entries.length === 0;
|
|
19
|
+
}
|
|
20
|
+
finalize(om) {
|
|
21
|
+
if (this.entries.length === 0)
|
|
22
|
+
return "";
|
|
23
|
+
// Nest by level: a stack where stack[i] is the last open node at level i+1. An entry at level L
|
|
24
|
+
// becomes a child of stack[L-2] (the enclosing smaller level), or a root when L is 1. Levels that
|
|
25
|
+
// skip a step (1 -> 3) are clamped to one deeper than the current stack so nothing is orphaned.
|
|
26
|
+
const roots = [];
|
|
27
|
+
const stack = [];
|
|
28
|
+
for (const e of this.entries) {
|
|
29
|
+
const level = Math.max(1, Math.min(e.level, stack.length + 1));
|
|
30
|
+
stack.length = level - 1; // pop back to this entry's parent depth
|
|
31
|
+
const node = { ...e, children: [] };
|
|
32
|
+
if (level === 1)
|
|
33
|
+
roots.push(node);
|
|
34
|
+
else
|
|
35
|
+
stack[level - 2].children.push(node);
|
|
36
|
+
stack[level - 1] = node;
|
|
37
|
+
}
|
|
38
|
+
// Reserve an object number for every node up front - parent/child/prev/next all cross-reference.
|
|
39
|
+
const objOf = new Map();
|
|
40
|
+
const walk = (nodes) => {
|
|
41
|
+
for (const n of nodes) {
|
|
42
|
+
objOf.set(n, om.addObject(""));
|
|
43
|
+
walk(n.children);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
walk(roots);
|
|
47
|
+
const rootNum = om.addObject(""); // the /Outlines dictionary itself
|
|
48
|
+
// Count of all descendants of a node (used for the /Count of an open item, which shows them all).
|
|
49
|
+
const descendantCount = (n) => n.children.reduce((sum, c) => sum + 1 + descendantCount(c), 0);
|
|
50
|
+
const totalCount = roots.reduce((sum, r) => sum + 1 + descendantCount(r), 0);
|
|
51
|
+
// Emit each item dict, wired to its parent, siblings (prev/next) and first/last child.
|
|
52
|
+
const emit = (nodes, parentNum) => {
|
|
53
|
+
nodes.forEach((n, i) => {
|
|
54
|
+
const parts = [`/Title ${om.pdfString(n.title)}`, `/Parent ${parentNum} 0 R`];
|
|
55
|
+
if (i > 0)
|
|
56
|
+
parts.push(`/Prev ${objOf.get(nodes[i - 1])} 0 R`);
|
|
57
|
+
if (i < nodes.length - 1)
|
|
58
|
+
parts.push(`/Next ${objOf.get(nodes[i + 1])} 0 R`);
|
|
59
|
+
if (n.children.length > 0) {
|
|
60
|
+
parts.push(`/First ${objOf.get(n.children[0])} 0 R`);
|
|
61
|
+
parts.push(`/Last ${objOf.get(n.children[n.children.length - 1])} 0 R`);
|
|
62
|
+
parts.push(`/Count ${descendantCount(n)}`); // positive = shown open
|
|
63
|
+
}
|
|
64
|
+
// /Dest: jump to this page, scrolling the target's top into view; null left/zoom keep the
|
|
65
|
+
// viewer's current horizontal position and magnification. Guard the top: a non-finite value
|
|
66
|
+
// (e.g. a bookmark under a Spacer in an unbounded column) would emit invalid PDF, so fall back
|
|
67
|
+
// to the page top (0 flips to the page top edge).
|
|
68
|
+
const top = Number.isFinite(n.top) ? num(n.top) : 0;
|
|
69
|
+
parts.push(`/Dest [${n.pageObjNum} 0 R /XYZ null ${top} null]`);
|
|
70
|
+
om.replaceObject(objOf.get(n), `<< ${parts.join(" ")} >>`);
|
|
71
|
+
emit(n.children, objOf.get(n));
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
emit(roots, rootNum);
|
|
75
|
+
om.replaceObject(rootNum, `<< /Type /Outlines /First ${objOf.get(roots[0])} 0 R ` +
|
|
76
|
+
`/Last ${objOf.get(roots[roots.length - 1])} 0 R /Count ${totalCount} >>`);
|
|
77
|
+
return `/Outlines ${rootNum} 0 R`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
1
|
+
import type { OverflowPolicy } from "../layout/fragmentation.js";
|
|
2
|
+
import { TTFParser } from "./ttf-parser.js";
|
|
3
|
+
import { type ShapedGlyph } from "../text/shape.js";
|
|
4
|
+
import type { SecurityHandler } from "../crypto/security-handler.js";
|
|
5
|
+
import type { Gradient } from "../ir/display-list.js";
|
|
6
|
+
import type { FontVerticals } from "../text/line-metrics.js";
|
|
7
|
+
import type { FontDecoration } from "../text/text-decoration.js";
|
|
8
|
+
import { StructTree } from "./struct-tree.js";
|
|
9
|
+
import { OutlineBuilder } from "./outline.js";
|
|
10
|
+
import { DestRegistry } from "./dest-registry.js";
|
|
11
|
+
import { AcroFormCollector } from "../forms/acroform.js";
|
|
12
|
+
import type { PDFConfig } from "../renderer/pdf-document-class.js";
|
|
13
|
+
import type { FontMetrics } from "./font-metrics.js";
|
|
3
14
|
interface FontIndexes {
|
|
4
15
|
fontIndex: number;
|
|
5
16
|
resourceIndex: number;
|
|
@@ -19,31 +30,79 @@ export declare class PDFObjectManager implements FontMetrics {
|
|
|
19
30
|
private fonts;
|
|
20
31
|
private images;
|
|
21
32
|
private extGStates;
|
|
33
|
+
private shadings;
|
|
34
|
+
private emojiFontName?;
|
|
35
|
+
private emojiImage?;
|
|
22
36
|
private pdfConfig;
|
|
23
37
|
pageFormat: [number, number];
|
|
24
38
|
private afmParsers;
|
|
25
39
|
private customFonts;
|
|
40
|
+
private verticalsCache;
|
|
41
|
+
private decorationCache;
|
|
26
42
|
private customFontEmit;
|
|
43
|
+
private shapeCache;
|
|
44
|
+
private shapedOrigins;
|
|
27
45
|
private attachments;
|
|
28
46
|
private xmpMetadata?;
|
|
29
47
|
private outputIntent?;
|
|
30
48
|
private pdfVersion;
|
|
31
49
|
private documentId;
|
|
32
50
|
private compress;
|
|
51
|
+
private overflowPolicy;
|
|
52
|
+
private security?;
|
|
53
|
+
private encJobs;
|
|
54
|
+
private strJobs;
|
|
55
|
+
private encryptObjNum?;
|
|
56
|
+
private _struct;
|
|
57
|
+
get struct(): StructTree;
|
|
58
|
+
private _outline;
|
|
59
|
+
get outline(): OutlineBuilder;
|
|
60
|
+
private _dests;
|
|
61
|
+
get dests(): DestRegistry;
|
|
62
|
+
private _acroform;
|
|
63
|
+
get acroform(): AcroFormCollector;
|
|
33
64
|
constructor();
|
|
34
65
|
addObject(content: string): number;
|
|
35
66
|
replaceObject(objectNumber: number, content: string): void;
|
|
36
67
|
setCompress(on: boolean): void;
|
|
68
|
+
/**
|
|
69
|
+
* Code points no font in the document could draw, so they were removed rather than emitted as
|
|
70
|
+
* `.notdef` (which PDF/A forbids). Collected here because this object is the one thing threaded
|
|
71
|
+
* through BOTH passes; the caller gets them back with the bytes, so an application can say which
|
|
72
|
+
* character went missing instead of a server log nobody reads.
|
|
73
|
+
*/
|
|
74
|
+
private readonly missingGlyphs;
|
|
75
|
+
reportMissingGlyph(codePoints: number[]): void;
|
|
76
|
+
/** The dropped code points, in the order first seen. Empty for a document that hit none. */
|
|
77
|
+
getMissingGlyphs(): number[];
|
|
78
|
+
setOverflowPolicy(policy: OverflowPolicy): void;
|
|
79
|
+
getOverflowPolicy(): OverflowPolicy;
|
|
80
|
+
private encToken;
|
|
81
|
+
private strToken;
|
|
82
|
+
/**
|
|
83
|
+
* The single choke-point every literal string in an OBJECT goes through - a field's `/T` and `/V`, a
|
|
84
|
+
* bookmark `/Title`, a link `/URI`, an `/Alt` text, a destination name.
|
|
85
|
+
*
|
|
86
|
+
* Without a security handler this is the escaped literal we have always written, so output stays
|
|
87
|
+
* byte-identical. With one, the raw bytes are registered for the finalize pass and a placeholder takes
|
|
88
|
+
* their place: ISO 32000-1 7.6.2 requires ALL strings and streams to be encrypted, and the ones missed
|
|
89
|
+
* here were exactly the values a password is supposed to protect (ISSUE-7).
|
|
90
|
+
*
|
|
91
|
+
* A string INSIDE a content stream needs none of this - the stream is enciphered as a whole.
|
|
92
|
+
*/
|
|
93
|
+
pdfString(text: string): string;
|
|
94
|
+
private streamPayload;
|
|
37
95
|
private stream;
|
|
38
96
|
addContentStream(content: string): number;
|
|
97
|
+
addFormXObject(bbox: string, content: string, resources?: string): number;
|
|
39
98
|
changePDFConfig(config: PDFConfig): void;
|
|
40
99
|
getPDFConfig(): PDFConfig;
|
|
41
100
|
private fillConfigWithStandardValues;
|
|
42
101
|
private getCurrentByteLength;
|
|
43
102
|
setParentObjectNumber(number: number): void;
|
|
44
103
|
getParentObjectNumber(): number;
|
|
45
|
-
registerImage(width: number, height: number, imageType: string, imageData: string): number;
|
|
46
|
-
attachFile(name: string, data:
|
|
104
|
+
registerImage(width: number, height: number, imageType: string, imageData: string, smaskData?: string): number;
|
|
105
|
+
attachFile(name: string, data: Uint8Array, opts?: {
|
|
47
106
|
relationship?: string;
|
|
48
107
|
mimeType?: string;
|
|
49
108
|
description?: string;
|
|
@@ -54,7 +113,7 @@ export declare class PDFObjectManager implements FontMetrics {
|
|
|
54
113
|
}[];
|
|
55
114
|
setXmpMetadata(xml: string): void;
|
|
56
115
|
getXmpMetadata(): string | undefined;
|
|
57
|
-
setOutputIntent(icc:
|
|
116
|
+
setOutputIntent(icc: Uint8Array, opts?: {
|
|
58
117
|
identifier?: string;
|
|
59
118
|
info?: string;
|
|
60
119
|
}): void;
|
|
@@ -63,10 +122,15 @@ export declare class PDFObjectManager implements FontMetrics {
|
|
|
63
122
|
getPdfVersion(): string;
|
|
64
123
|
getHeader(): string;
|
|
65
124
|
enableDocumentId(): void;
|
|
125
|
+
setSecurityHandler(handler: SecurityHandler): void;
|
|
126
|
+
finalizeEncryption(): Promise<void>;
|
|
66
127
|
registerExtGState(fillAlpha: number, strokeAlpha: number): string;
|
|
67
128
|
getAllExtGStatesRaw(): Map<string, number>;
|
|
129
|
+
registerShading(g: Gradient): string;
|
|
130
|
+
private buildShadingFunction;
|
|
131
|
+
getAllShadingsRaw(): Map<string, number>;
|
|
68
132
|
registerFont(fontName: string, fontStyle?: FontStyle, fullName?: string): FontIndexes;
|
|
69
|
-
registerCustomFont(name: string, data:
|
|
133
|
+
registerCustomFont(name: string, data: Uint8Array, style?: FontStyle): void;
|
|
70
134
|
private ensureEmitted;
|
|
71
135
|
finalizeCustomFonts(): void;
|
|
72
136
|
private subsetTag;
|
|
@@ -74,18 +138,73 @@ export declare class PDFObjectManager implements FontMetrics {
|
|
|
74
138
|
private resolveCustomStyle;
|
|
75
139
|
private getCustomFont;
|
|
76
140
|
isCustomFont(name?: string, style?: FontStyle): boolean;
|
|
141
|
+
getColorFont(name: string, style?: FontStyle): TTFParser | undefined;
|
|
142
|
+
setEmojiFont(name: string): void;
|
|
143
|
+
getEmojiFont(): string | undefined;
|
|
144
|
+
setEmojiImageSource(url: string, format: string): void;
|
|
145
|
+
getEmojiImageSource(): {
|
|
146
|
+
url: string;
|
|
147
|
+
format: string;
|
|
148
|
+
} | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* Whether a family can draw this code point at all. An embedded face answers from its `cmap`; a
|
|
151
|
+
* standard-14 one can only draw what Windows-1252 encodes, which is what its `/Widths` array covers.
|
|
152
|
+
* Used to pick a family out of a fallback stack, per code point.
|
|
153
|
+
*/
|
|
154
|
+
hasGlyph(codePoint: number, fontFamily: string, fontStyle?: FontStyle): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Whether the document draws this code point through the colour-emoji path instead of the text
|
|
157
|
+
* font - a fallback emoji FONT, or an image source (`Document({ emoji })`). Such a code point is
|
|
158
|
+
* missing from the text font ON PURPOSE, so glyph coverage must leave it alone. Mirrors exactly
|
|
159
|
+
* what `getCharWidth` measures it as, or a dropped emoji would have been measured and not drawn.
|
|
160
|
+
*/
|
|
161
|
+
rendersAsEmoji(codePoint: number, fontFamily: string, fontStyle: FontStyle): boolean;
|
|
162
|
+
private colorRenders;
|
|
77
163
|
getCustomFontResource(name: string, style?: FontStyle): FontIndexes | undefined;
|
|
164
|
+
/** How many glyphs a run draws - its code-point count unless a ligature merged some. `letterSpacing`
|
|
165
|
+
* is per glyph (`Tc`), so this is what it multiplies. */
|
|
166
|
+
shapedGlyphCount(text: string, fontFamily?: string, fontStyle?: FontStyle): number | undefined;
|
|
167
|
+
/**
|
|
168
|
+
* The shaped glyphs of a run, or undefined when nothing needed shaping. The ONE place shaping is
|
|
169
|
+
* decided, so measuring and drawing cannot disagree. Memoised: a paragraph is measured several
|
|
170
|
+
* times (layout, pagination, drawing).
|
|
171
|
+
*/
|
|
172
|
+
shapeText(text: string, fontFamily?: string, fontStyle?: FontStyle): ShapedGlyph[] | undefined;
|
|
173
|
+
/** Hex Identity-H for glyphs the producer already resolved (a shaped run), which cannot be given as
|
|
174
|
+
* text. Recording each keeps it in the subset. */
|
|
175
|
+
registerGlyphs(name: string, glyphs: readonly number[], style?: FontStyle): string;
|
|
78
176
|
encodeCustomText(name: string, text: string, style?: FontStyle): string;
|
|
79
177
|
private buildFontFile2;
|
|
80
178
|
private buildFontDescriptor;
|
|
81
179
|
private buildCIDFont;
|
|
82
180
|
private buildToUnicode;
|
|
83
181
|
private buildType0;
|
|
182
|
+
getFontVerticals(fontFamily: string, fontStyle: FontStyle): FontVerticals;
|
|
183
|
+
getFontDecoration(fontFamily: string, fontStyle: FontStyle): FontDecoration;
|
|
184
|
+
kerningEnabled: boolean;
|
|
185
|
+
setKerning(enabled: boolean): void;
|
|
186
|
+
/**
|
|
187
|
+
* The kerning adjustment for each adjacent code-point pair of `text`, in em/1000 (the sign the
|
|
188
|
+
* font declares: negative tightens). Length is `codePointCount - 1`. Zero at any pair next to a
|
|
189
|
+
* space - letters are never kerned against a space, which also keeps a per-word measure equal to a
|
|
190
|
+
* whole-line one (the space pairs contribute nothing either way).
|
|
191
|
+
*
|
|
192
|
+
* Standard-14 answers from the AFM `KPX` pairs. An embedded font has no kerning yet (its `kern` /
|
|
193
|
+
* `GPOS` tables are unparsed), so it returns zeros - never a wrong value, just no adjustment.
|
|
194
|
+
*/
|
|
195
|
+
getKernPairs(text: string, fontFamily: string, fontStyle: FontStyle): number[];
|
|
196
|
+
/**
|
|
197
|
+
* Where the glyphs of `text` put ink inside a horizontal band, as x-intervals in POINTS measured
|
|
198
|
+
* from the start of the run. This is what an underline steps around ("skip-ink").
|
|
199
|
+
*
|
|
200
|
+
* `bandTop` / `bandBottom` are in points relative to the baseline, y UP (so both negative under
|
|
201
|
+
* it). Only an EMBEDDED font can answer: the standard-14 outlines live in the viewer, not here.
|
|
202
|
+
* Callers must check `isCustomFont` first rather than treat an empty result as "no descenders".
|
|
203
|
+
*/
|
|
204
|
+
getInkSpansInBand(text: string, fontSize: number, fontFamily: string, fontStyle: FontStyle, bandTop: number, bandBottom: number, letterSpacing?: number): Array<[number, number]>;
|
|
84
205
|
getStringWidth(text: string, fontFamily: string, fontSize: number, fontStyle: FontStyle): number;
|
|
85
|
-
private getCharCode;
|
|
86
206
|
private getAVMParserByFont;
|
|
87
207
|
getCharWidth(char: string, fontSize: number, fullFontName?: string, fontName?: string, fontStyle?: FontStyle): number;
|
|
88
|
-
private getKerning;
|
|
89
208
|
getAllFontsRaw(): Map<string, FontIndexes>;
|
|
90
209
|
getAllImagesRaw(): Map<string, number>;
|
|
91
210
|
getRenderedObjects(): string;
|