blitz-pdf 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +300 -10
  2. package/THIRD_PARTY_NOTICES.md +4 -2
  3. package/dist/browser.d.ts +1 -1
  4. package/dist/browser.d.ts.map +1 -1
  5. package/dist/document-options.d.ts +36 -0
  6. package/dist/document-options.d.ts.map +1 -0
  7. package/dist/document-options.js +236 -0
  8. package/dist/document-options.js.map +1 -0
  9. package/dist/node.d.ts +1 -1
  10. package/dist/node.d.ts.map +1 -1
  11. package/dist/options.d.ts +35 -1
  12. package/dist/options.d.ts.map +1 -1
  13. package/dist/options.js +21 -14
  14. package/dist/options.js.map +1 -1
  15. package/dist/types.d.ts +71 -1
  16. package/dist/types.d.ts.map +1 -1
  17. package/dist/validation.d.ts +2 -0
  18. package/dist/validation.d.ts.map +1 -0
  19. package/dist/validation.js +7 -0
  20. package/dist/validation.js.map +1 -0
  21. package/examples/zugferd.mjs +41 -0
  22. package/licenses/RUST_DEPENDENCIES.txt +27 -0
  23. package/package.json +3 -2
  24. package/src/browser.ts +1 -1
  25. package/src/document-options.ts +218 -0
  26. package/src/node.ts +1 -1
  27. package/src/options.ts +18 -13
  28. package/src/types.ts +76 -1
  29. package/src/validation.ts +6 -0
  30. package/vendor/README.md +27 -2
  31. package/vendor/krilla/.cargo-ok +1 -0
  32. package/vendor/krilla/.cargo_vcs_info.json +6 -0
  33. package/vendor/krilla/Cargo.lock +1357 -0
  34. package/vendor/krilla/Cargo.toml +165 -0
  35. package/vendor/krilla/LICENSE_APACHE +202 -0
  36. package/vendor/krilla/LICENSE_MIT +21 -0
  37. package/vendor/krilla/README.md +156 -0
  38. package/vendor/krilla/examples/basic.rs +117 -0
  39. package/vendor/krilla/examples/empty_document.rs +25 -0
  40. package/vendor/krilla/examples/parley.rs +174 -0
  41. package/vendor/krilla/examples/simple_text.rs +118 -0
  42. package/vendor/krilla/examples/stream_builder.rs +93 -0
  43. package/vendor/krilla/icc/LICENSE +116 -0
  44. package/vendor/krilla/icc/README.md +1 -0
  45. package/vendor/krilla/icc/sGrey-v2-magic.icc +0 -0
  46. package/vendor/krilla/icc/sGrey-v4.icc +0 -0
  47. package/vendor/krilla/icc/sRGB-v2-magic.icc +0 -0
  48. package/vendor/krilla/icc/sRGB-v4.icc +0 -0
  49. package/vendor/krilla/src/chunk_container.rs +503 -0
  50. package/vendor/krilla/src/configure/PDF_A1.md +227 -0
  51. package/vendor/krilla/src/configure/PDF_A2.md +269 -0
  52. package/vendor/krilla/src/configure/PDF_A3.md +31 -0
  53. package/vendor/krilla/src/configure/PDF_A4.md +211 -0
  54. package/vendor/krilla/src/configure/PDF_UA1.md +202 -0
  55. package/vendor/krilla/src/configure/README.md +23 -0
  56. package/vendor/krilla/src/configure/mod.rs +197 -0
  57. package/vendor/krilla/src/configure/validate.rs +1244 -0
  58. package/vendor/krilla/src/configure/version.rs +134 -0
  59. package/vendor/krilla/src/content.rs +1352 -0
  60. package/vendor/krilla/src/data.rs +49 -0
  61. package/vendor/krilla/src/document.rs +156 -0
  62. package/vendor/krilla/src/error.rs +170 -0
  63. package/vendor/krilla/src/geom.rs +341 -0
  64. package/vendor/krilla/src/graphics/blend.rs +46 -0
  65. package/vendor/krilla/src/graphics/color.rs +552 -0
  66. package/vendor/krilla/src/graphics/graphic.rs +30 -0
  67. package/vendor/krilla/src/graphics/graphics_state.rs +251 -0
  68. package/vendor/krilla/src/graphics/icc.rs +218 -0
  69. package/vendor/krilla/src/graphics/image.rs +835 -0
  70. package/vendor/krilla/src/graphics/mask.rs +128 -0
  71. package/vendor/krilla/src/graphics/mod.rs +14 -0
  72. package/vendor/krilla/src/graphics/paint.rs +434 -0
  73. package/vendor/krilla/src/graphics/separation.rs +86 -0
  74. package/vendor/krilla/src/graphics/shading_function.rs +865 -0
  75. package/vendor/krilla/src/graphics/shading_pattern.rs +60 -0
  76. package/vendor/krilla/src/graphics/tiling_pattern.rs +119 -0
  77. package/vendor/krilla/src/graphics/xobject.rs +150 -0
  78. package/vendor/krilla/src/interactive/action.rs +68 -0
  79. package/vendor/krilla/src/interactive/annotation.rs +283 -0
  80. package/vendor/krilla/src/interactive/destination.rs +289 -0
  81. package/vendor/krilla/src/interactive/mod.rs +3 -0
  82. package/vendor/krilla/src/interchange/embed.rs +240 -0
  83. package/vendor/krilla/src/interchange/metadata.rs +564 -0
  84. package/vendor/krilla/src/interchange/mod.rs +4 -0
  85. package/vendor/krilla/src/interchange/outline.rs +263 -0
  86. package/vendor/krilla/src/interchange/tagging/fmt.rs +733 -0
  87. package/vendor/krilla/src/interchange/tagging/generate.toml +474 -0
  88. package/vendor/krilla/src/interchange/tagging/generated.rs +4754 -0
  89. package/vendor/krilla/src/interchange/tagging/mod.rs +1324 -0
  90. package/vendor/krilla/src/interchange/tagging/tag.rs +686 -0
  91. package/vendor/krilla/src/lib.rs +179 -0
  92. package/vendor/krilla/src/num.rs +26 -0
  93. package/vendor/krilla/src/page.rs +612 -0
  94. package/vendor/krilla/src/pdf.rs +313 -0
  95. package/vendor/krilla/src/resource.rs +436 -0
  96. package/vendor/krilla/src/serialize.rs +1101 -0
  97. package/vendor/krilla/src/stream.rs +368 -0
  98. package/vendor/krilla/src/surface.rs +664 -0
  99. package/vendor/krilla/src/text/cid.rs +488 -0
  100. package/vendor/krilla/src/text/font.rs +351 -0
  101. package/vendor/krilla/src/text/glyph/bitmap.rs +81 -0
  102. package/vendor/krilla/src/text/glyph/colr.rs +581 -0
  103. package/vendor/krilla/src/text/glyph/mod.rs +205 -0
  104. package/vendor/krilla/src/text/glyph/outline.rs +72 -0
  105. package/vendor/krilla/src/text/glyph/svg.rs +34 -0
  106. package/vendor/krilla/src/text/group.rs +463 -0
  107. package/vendor/krilla/src/text/mod.rs +232 -0
  108. package/vendor/krilla/src/text/shape.rs +102 -0
  109. package/vendor/krilla/src/text/type3.rs +514 -0
  110. package/vendor/krilla/src/util.rs +286 -0
  111. package/vendor/stylo/properties/longhands.toml +0 -1
  112. package/vendor/stylo/stylesheets/rule_parser.rs +1 -1
  113. package/wasm/blitz_pdf.js +10 -5
  114. package/wasm/blitz_pdf_bg.wasm +0 -0
@@ -0,0 +1,236 @@
1
+ import { assetBytes } from "./assets.js";
2
+ import { record } from "./validation.js";
3
+ const MAX_ATTACHMENT_BYTES = 64 * 1024 * 1024;
4
+ const encoder = new TextEncoder();
5
+ const relationships = new Set(["Source", "Data", "Alternative", "Supplement", "Unspecified"]);
6
+ const reservedPrefixes = new Set(["x", "rdf", "dc", "pdf", "pdfaid", "pdfuaid", "pdfxid", "stRef", "stEvt", "stVer", "stJob", "stFnt", "stDim", "pdfaExtension", "pdfaSchema", "pdfaProperty", "pdfaType", "pdfaField", "xmp", "xmpRights", "xmpG", "xmpMM", "xmpBJ", "xmpTPg", "xmpDM", "xmpGImg", "xmpidq"]);
7
+ const reservedNamespaces = new Set([
8
+ "adobe:ns:meta/",
9
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
10
+ "http://purl.org/dc/elements/1.1/",
11
+ "http://www.w3.org/XML/1998/namespace",
12
+ "http://www.w3.org/2000/xmlns/",
13
+ "http://ns.adobe.com/pdf/1.3/",
14
+ "http://ns.adobe.com/xmp/Identifier/qual/1.0/",
15
+ "http://www.npes.org/pdfx/ns/id/",
16
+ "http://www.aiim.org/pdfua/ns/id/",
17
+ "http://ns.adobe.com/xap/1.0/",
18
+ "http://ns.adobe.com/xap/1.0/rights/",
19
+ "http://ns.adobe.com/xap/1.0/sType/ResourceRef#",
20
+ "http://ns.adobe.com/xap/1.0/sType/ResourceEvent#",
21
+ "http://ns.adobe.com/xap/1.0/sType/Version#",
22
+ "http://ns.adobe.com/xap/1.0/sType/Job#",
23
+ "http://ns.adobe.com/xap/1.0/g/",
24
+ "http://ns.adobe.com/xap/1.0/sType/Font#",
25
+ "http://ns.adobe.com/xap/1.0/sType/Dimensions#",
26
+ "http://ns.adobe.com/xap/1.0/mm/",
27
+ "http://ns.adobe.com/xap/1.0/bj/",
28
+ "http://ns.adobe.com/xap/1.0/t/pg/",
29
+ "http://ns.adobe.com/xap/1.0/DynamicMedia/",
30
+ "http://ns.adobe.com/xap/1.0/g/img/",
31
+ "http://www.aiim.org/pdfa/ns/id/",
32
+ "http://www.aiim.org/pdfa/ns/extension/",
33
+ "http://www.aiim.org/pdfa/ns/schema#",
34
+ "http://www.aiim.org/pdfa/ns/property#",
35
+ "http://www.aiim.org/pdfa/ns/type#",
36
+ "http://www.aiim.org/pdfa/ns/field#",
37
+ ]);
38
+ function keys(value, allowed, name) {
39
+ record(value, name);
40
+ for (const key of Object.keys(value)) {
41
+ if (!allowed.includes(key))
42
+ throw new TypeError(`Unknown ${name} option: ${key}`);
43
+ }
44
+ }
45
+ function text(value, name, maxBytes = 16 * 1024) {
46
+ if (typeof value !== "string")
47
+ throw new TypeError(`${name} must be a string`);
48
+ // XML 1.0 characters only, including rejection of unpaired UTF-16 surrogates.
49
+ if (/[^\u0009\u000a\u000d\u0020-\ud7ff\ue000-\ufffd\u{10000}-\u{10ffff}]/u.test(value)) {
50
+ throw new TypeError(`${name} contains invalid XML characters`);
51
+ }
52
+ if (value.length > maxBytes || encoder.encode(value).byteLength > maxBytes) {
53
+ throw new RangeError(`${name} exceeds the ${maxBytes} byte limit`);
54
+ }
55
+ // XML normalizes literal CR/CRLF to LF. Match that in the PDF Info dictionary.
56
+ return value.replace(/\r\n?/g, "\n");
57
+ }
58
+ function optionalText(value, name) {
59
+ return value === undefined ? null : text(value, name);
60
+ }
61
+ function textList(value, name) {
62
+ if (value === undefined)
63
+ return [];
64
+ if (!Array.isArray(value))
65
+ throw new TypeError(`${name} must be an array of strings`);
66
+ if (value.length > 256)
67
+ throw new RangeError(`${name} must contain at most 256 entries`);
68
+ const result = Array.from(value, (entry, i) => text(entry, `${name}[${i}]`));
69
+ text(result.join(", "), name);
70
+ return result;
71
+ }
72
+ function xmlName(value, label) {
73
+ const name = text(value, label, 128);
74
+ if (!/^[A-Za-z_][A-Za-z0-9_.-]*$/.test(name) || /^xml/i.test(name)) {
75
+ throw new TypeError(`${label} must be an ASCII XML name without a colon or xml prefix`);
76
+ }
77
+ return name;
78
+ }
79
+ function xmpSchemas(value) {
80
+ if (value === undefined)
81
+ return [];
82
+ if (!Array.isArray(value))
83
+ throw new TypeError("metadata.xmp must be an array of schemas");
84
+ if (value.length > 32)
85
+ throw new RangeError("metadata.xmp exceeds the 32 schema limit");
86
+ const prefixes = new Set();
87
+ const namespaces = new Set();
88
+ let count = 0, size = 0;
89
+ return Array.from(value, (schema, i) => {
90
+ const label = `metadata.xmp[${i}]`;
91
+ keys(schema, ["name", "namespaceUri", "prefix", "properties"], label);
92
+ const name = text(schema.name, `${label}.name`);
93
+ if (!name.trim())
94
+ throw new TypeError(`${label}.name must not be empty`);
95
+ const prefix = xmlName(schema.prefix, `${label}.prefix`);
96
+ const namespaceUri = text(schema.namespaceUri, `${label}.namespaceUri`);
97
+ // xmp-writer writes namespace declarations as attributes. Require an absolute,
98
+ // ASCII URI without XML delimiters; callers can percent-encode these characters.
99
+ if (!/^[a-z][a-z0-9+.-]*:[\x21-\x7e]+$/i.test(namespaceUri) || /[<>"'&]/.test(namespaceUri)) {
100
+ throw new TypeError(`${label}.namespaceUri must be an absolute URI with XML delimiters percent-encoded`);
101
+ }
102
+ if (reservedPrefixes.has(prefix) || reservedNamespaces.has(namespaceUri)) {
103
+ throw new TypeError(`${label} uses a reserved XMP prefix or namespace`);
104
+ }
105
+ if (prefixes.has(prefix) || namespaces.has(namespaceUri))
106
+ throw new TypeError(`${label} has a duplicate XMP prefix or namespace`);
107
+ prefixes.add(prefix);
108
+ namespaces.add(namespaceUri);
109
+ if (!Array.isArray(schema.properties) || schema.properties.length === 0)
110
+ throw new TypeError(`${label}.properties must be a non-empty array`);
111
+ count += schema.properties.length;
112
+ if (count > 256)
113
+ throw new RangeError("metadata.xmp exceeds the 256 property limit");
114
+ const propertyNames = new Set();
115
+ size += encoder.encode(name + namespaceUri + prefix).byteLength;
116
+ const properties = Array.from(schema.properties, (property, j) => {
117
+ const key = `${label}.properties[${j}]`;
118
+ keys(property, ["name", "value", "description", "category"], key);
119
+ const name = xmlName(property.name, `${key}.name`);
120
+ if (propertyNames.has(name))
121
+ throw new TypeError(`${key} has a duplicate XMP property name`);
122
+ propertyNames.add(name);
123
+ const value = text(property.value, `${key}.value`);
124
+ const description = text(property.description, `${key}.description`);
125
+ if (!description.trim())
126
+ throw new TypeError(`${key}.description must not be empty`);
127
+ const category = property.category === undefined ? "external" : property.category;
128
+ if (category !== "internal" && category !== "external")
129
+ throw new TypeError(`${key}.category must be internal or external`);
130
+ size += encoder.encode(name + value + description).byteLength;
131
+ if (size > 1024 * 1024)
132
+ throw new RangeError("metadata.xmp exceeds the 1 MiB limit");
133
+ return { name, value, description, category };
134
+ });
135
+ return { name, prefix, namespaceUri, properties };
136
+ });
137
+ }
138
+ function date(value, name, fallback) {
139
+ if (value === undefined)
140
+ return fallback;
141
+ let result;
142
+ if (value instanceof Date)
143
+ result = value.getTime();
144
+ else if (typeof value === "string") {
145
+ const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d{1,3})?(Z|[+-]\d{2}:\d{2})$/.exec(value);
146
+ if (!match)
147
+ throw new TypeError(`${name} must be a Date or ISO timestamp with a timezone`);
148
+ const [, y, mo, d, h, mi, s, zone] = match;
149
+ const year = Number(y), month = Number(mo), day = Number(d);
150
+ const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
151
+ const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
152
+ if (month < 1 || month > 12 || day < 1 || day > days[month - 1] ||
153
+ Number(h) > 23 || Number(mi) > 59 || Number(s) > 59 ||
154
+ (zone !== "Z" && (Number(zone.slice(1, 3)) > 23 || Number(zone.slice(4)) > 59))) {
155
+ throw new RangeError(`${name} is not a valid calendar date`);
156
+ }
157
+ result = Date.parse(value);
158
+ }
159
+ else
160
+ throw new TypeError(`${name} must be a Date or ISO timestamp with a timezone`);
161
+ if (!Number.isFinite(result) || result < -62135596800000 || result > 253402300799999) {
162
+ throw new RangeError(`${name} must be a valid date in years 0001 through 9999`);
163
+ }
164
+ return Math.floor(result / 1000) * 1000;
165
+ }
166
+ export function normalizeDocumentOptions(options) {
167
+ const legacyTitle = optionalText(options.title, "title");
168
+ const input = options.metadata === undefined ? {} : options.metadata;
169
+ keys(input, ["title", "author", "subject", "keywords", "creator", "producer", "language", "creationDate", "modificationDate", "documentId", "xmp"], "metadata");
170
+ const creationDate = date(input.creationDate, "metadata.creationDate", Math.floor(Date.now() / 1000) * 1000);
171
+ const modificationDate = date(input.modificationDate, "metadata.modificationDate", creationDate);
172
+ if (modificationDate < creationDate)
173
+ throw new RangeError("metadata.modificationDate must not precede creationDate");
174
+ const language = optionalText(input.language, "metadata.language");
175
+ if (language !== null && !/^(?:[a-z]{2,8}|x)(?:-[a-z0-9]{1,8})*$/i.test(language)) {
176
+ throw new TypeError("metadata.language must be a language tag such as de-DE");
177
+ }
178
+ const metadata = {
179
+ title: input.title === undefined ? legacyTitle : text(input.title, "metadata.title"),
180
+ authors: textList(typeof input.author === "string" ? [input.author] : input.author, "metadata.author"),
181
+ subject: optionalText(input.subject, "metadata.subject"),
182
+ keywords: textList(input.keywords, "metadata.keywords"),
183
+ creator: optionalText(input.creator, "metadata.creator"),
184
+ producer: optionalText(input.producer, "metadata.producer"),
185
+ language, creationDate, modificationDate,
186
+ documentId: optionalText(input.documentId, "metadata.documentId"),
187
+ xmp: xmpSchemas(input.xmp),
188
+ };
189
+ if (options.attachments !== undefined && !Array.isArray(options.attachments)) {
190
+ throw new TypeError("attachments must be an array");
191
+ }
192
+ if ((options.attachments?.length ?? 0) > 100) {
193
+ throw new RangeError("Attachments exceed the 100 file limit");
194
+ }
195
+ let totalBytes = 0;
196
+ const names = new Set();
197
+ function attachment(file, label) {
198
+ keys(file, ["name", "data", "mimeType", "description", "relationship", "modificationDate", "compress"], label);
199
+ const name = text(file.name, `${label}.name`, 255);
200
+ if (!name.trim() || name === "." || name === ".." || /[/\\:\u0000-\u001f\u007f-\u009f]/u.test(name)) {
201
+ throw new TypeError(`${label}.name must be a filename without directories or control characters`);
202
+ }
203
+ const normalizedName = name.normalize("NFC");
204
+ if (names.has(normalizedName))
205
+ throw new TypeError(`Duplicate attachment name: ${name}`);
206
+ names.add(normalizedName);
207
+ const mimeType = file.mimeType === undefined ? "application/octet-stream" : file.mimeType;
208
+ if (typeof mimeType !== "string" || mimeType.length > 255 || !/^[a-z0-9][a-z0-9.+-]*\/[a-z0-9][a-z0-9.+-]*$/i.test(mimeType)) {
209
+ throw new TypeError(`${label}.mimeType must be a MIME type without parameters`);
210
+ }
211
+ const relationship = file.relationship === undefined ? "Unspecified" : file.relationship;
212
+ if (!relationships.has(relationship))
213
+ throw new TypeError(`${label}.relationship is invalid`);
214
+ if (file.compress !== undefined && typeof file.compress !== "boolean")
215
+ throw new TypeError(`${label}.compress must be a boolean`);
216
+ const data = file.data;
217
+ // Check binary sizes before allocating the defensive copy.
218
+ const size = typeof data === "string" ? data.length : data instanceof Uint8Array || data instanceof ArrayBuffer ? data.byteLength : 0;
219
+ if (totalBytes + size > MAX_ATTACHMENT_BYTES)
220
+ throw new RangeError("Attachments exceed the 64 MiB limit");
221
+ const bytes = assetBytes(data, `${label}.data`);
222
+ totalBytes += bytes.byteLength;
223
+ if (totalBytes > MAX_ATTACHMENT_BYTES)
224
+ throw new RangeError("Attachments exceed the 64 MiB limit");
225
+ return {
226
+ name, data: bytes, mimeType,
227
+ description: file.description === undefined ? name : text(file.description, `${label}.description`),
228
+ relationship: relationship,
229
+ modificationDate: date(file.modificationDate, `${label}.modificationDate`, modificationDate),
230
+ compress: file.compress ?? null,
231
+ };
232
+ }
233
+ const attachments = Array.from(options.attachments ?? [], (file, i) => attachment(file, `attachments[${i}]`));
234
+ return { metadata, attachments };
235
+ }
236
+ //# sourceMappingURL=document-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-options.js","sourceRoot":"","sources":["../src/document-options.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export type { AssetData, AssetMap, AssetResolver, BinaryData, InitOptions, Length, PageFormat, PageNumberOptions, PdfOptions, WasmSource } from "./types.js";
1
+ export type { AssetData, AssetMap, AssetResolver, AttachmentRelationship, BinaryData, InitOptions, Length, PageFormat, PageNumberOptions, PdfAttachment, PdfDate, PdfMetadata, PdfOptions, PdfXmpProperty, PdfXmpSchema, WasmSource } from "./types.js";
2
2
  export declare const init: (options?: import("./types.js").InitOptions) => Promise<void>, renderPdf: (html: string, options?: import("./types.js").PdfOptions) => Promise<Uint8Array>, getEngineVersion: () => Promise<string>;
3
3
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7J,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,gBAAgB,uBAO/C,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxP,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,gBAAgB,uBAO/C,CAAC"}
package/dist/options.d.ts CHANGED
@@ -1,5 +1,37 @@
1
1
  import type { PdfOptions } from "./types.js";
2
2
  export declare function normalizeOptions(options?: PdfOptions): {
3
+ metadata: {
4
+ title: string | null;
5
+ authors: string[];
6
+ subject: string | null;
7
+ keywords: string[];
8
+ creator: string | null;
9
+ producer: string | null;
10
+ language: string | null;
11
+ creationDate: number;
12
+ modificationDate: number;
13
+ documentId: string | null;
14
+ xmp: {
15
+ name: string;
16
+ prefix: string;
17
+ namespaceUri: string;
18
+ properties: {
19
+ name: string;
20
+ value: string;
21
+ description: string;
22
+ category: any;
23
+ }[];
24
+ }[];
25
+ };
26
+ attachments: {
27
+ name: string;
28
+ data: Uint8Array<ArrayBufferLike>;
29
+ mimeType: string;
30
+ description: string;
31
+ relationship: import("./types.js").AttachmentRelationship;
32
+ modificationDate: number;
33
+ compress: boolean | null;
34
+ }[];
3
35
  width: number;
4
36
  height: number;
5
37
  margin: {
@@ -19,6 +51,8 @@ export declare function normalizeOptions(options?: PdfOptions): {
19
51
  align: "left" | "center" | "right";
20
52
  fontSize: number;
21
53
  } | null;
22
- title: string | null;
54
+ useCSSPageSize: boolean;
55
+ headerTemplate: string | null;
56
+ footerTemplate: string | null;
23
57
  };
24
58
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyC,UAAU,EAAE,MAAM,YAAY,CAAC;AA8BpF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,UAAe;;;;;;;;;;;;;;;;kBAwB1B,MAAM;eAAS,MAAM,GAAG,QAAQ,GAAG,OAAO;kBAAY,MAAM;;;EA6C1F"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyC,UAAU,EAAE,MAAM,YAAY,CAAC;AA2BpF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6B1B,MAAM;eAAS,MAAM,GAAG,QAAQ,GAAG,OAAO;kBAAY,MAAM;;;;;EA8C1F"}
package/dist/options.js CHANGED
@@ -1,11 +1,17 @@
1
1
  import { assetBytes, copyBytes, MAX_ASSET_BYTES } from "./assets.js";
2
+ import { normalizeDocumentOptions } from "./document-options.js";
3
+ import { record } from "./validation.js";
2
4
  const formats = {
5
+ A0: [841 * 96 / 25.4, 1189 * 96 / 25.4],
6
+ A1: [594 * 96 / 25.4, 841 * 96 / 25.4],
7
+ A2: [420 * 96 / 25.4, 594 * 96 / 25.4],
3
8
  A3: [297 * 96 / 25.4, 420 * 96 / 25.4],
4
9
  A4: [210 * 96 / 25.4, 297 * 96 / 25.4],
5
10
  A5: [148 * 96 / 25.4, 210 * 96 / 25.4],
6
- Letter: [8.5 * 96, 11 * 96], Legal: [8.5 * 96, 14 * 96], Tabloid: [11 * 96, 17 * 96],
11
+ A6: [105 * 96 / 25.4, 148 * 96 / 25.4],
12
+ Letter: [8.5 * 96, 11 * 96], Legal: [8.5 * 96, 14 * 96], Tabloid: [11 * 96, 17 * 96], Ledger: [17 * 96, 11 * 96],
7
13
  };
8
- const optionKeys = new Set(["format", "width", "height", "landscape", "margin", "media", "baseUrl", "assets", "fonts", "title", "pageNumbers", "maxPages"]);
14
+ const optionKeys = new Set(["format", "width", "height", "landscape", "preferCSSPageSize", "margin", "media", "baseUrl", "assets", "fonts", "title", "metadata", "attachments", "pageNumbers", "headerTemplate", "footerTemplate", "maxPages"]);
9
15
  const unitScale = { px: 1, pt: 96 / 72, mm: 96 / 25.4, cm: 96 / 2.54, in: 96 };
10
16
  function length(value, name) {
11
17
  let result;
@@ -23,12 +29,6 @@ function length(value, name) {
23
29
  throw new RangeError(`${name} must be finite and non-negative`);
24
30
  return result;
25
31
  }
26
- function record(value, name) {
27
- if (value === null || typeof value !== "object" || Array.isArray(value) ||
28
- ![Object.prototype, null].includes(Object.getPrototypeOf(value))) {
29
- throw new TypeError(`${name} must be a plain object`);
30
- }
31
- }
32
32
  export function normalizeOptions(options = {}) {
33
33
  record(options, "options");
34
34
  for (const key of Object.keys(options)) {
@@ -37,6 +37,14 @@ export function normalizeOptions(options = {}) {
37
37
  }
38
38
  if (options.landscape !== undefined && typeof options.landscape !== "boolean")
39
39
  throw new TypeError("landscape must be a boolean");
40
+ if (options.preferCSSPageSize !== undefined && typeof options.preferCSSPageSize !== "boolean")
41
+ throw new TypeError("preferCSSPageSize must be a boolean");
42
+ for (const key of ["headerTemplate", "footerTemplate"]) {
43
+ if (options[key] !== undefined && typeof options[key] !== "string")
44
+ throw new TypeError(`${key} must be an HTML string`);
45
+ if (new TextEncoder().encode(options[key] ?? "").byteLength > 1024 * 1024)
46
+ throw new RangeError(`${key} exceeds the 1 MiB limit`);
47
+ }
40
48
  const format = options.format ?? "A4";
41
49
  if (!Object.hasOwn(formats, format))
42
50
  throw new TypeError(`Unknown page format: ${String(format)}`);
@@ -85,17 +93,14 @@ export function normalizeOptions(options = {}) {
85
93
  throw new RangeError("pageNumbers.fontSize must be between 1 and 48 CSS pixels");
86
94
  pageNumbers = { template, align, fontSize };
87
95
  }
88
- const footerHeight = pageNumbers ? pageNumbers.fontSize * 2 + 8 : 0;
89
- if (width - margin.left - margin.right < 1 || height - margin.top - margin.bottom - footerHeight < 1)
90
- throw new RangeError("Margins and pageNumbers must leave at least one CSS pixel of content");
96
+ // Printable geometry is validated after external CSS @page rules have loaded.
91
97
  const media = options.media ?? "print";
92
98
  if (media !== "print" && media !== "screen")
93
99
  throw new TypeError("media must be print or screen");
94
100
  const maxPages = options.maxPages ?? 100;
95
101
  if (!Number.isInteger(maxPages) || maxPages < 1 || maxPages > 1000)
96
102
  throw new RangeError("maxPages must be an integer between 1 and 1000");
97
- if (options.title !== undefined && typeof options.title !== "string")
98
- throw new TypeError("title must be a string");
103
+ const document = normalizeDocumentOptions(options);
99
104
  const baseUrl = options.baseUrl ?? "https://blitz-pdf.invalid/";
100
105
  if (typeof baseUrl !== "string")
101
106
  throw new TypeError("baseUrl must be an absolute URL string");
@@ -130,6 +135,8 @@ export function normalizeOptions(options = {}) {
130
135
  const fonts = (options.fonts ?? []).map((font, i) => copyBytes(font, `fonts[${i}]`));
131
136
  if (fonts.reduce((total, font) => total + font.byteLength, 0) > 32 * 1024 * 1024)
132
137
  throw new RangeError("Fonts exceed the 32 MiB limit");
133
- return { width, height, margin, media, maxPages, baseUrl: base.href, assets, assetResolver, fonts, pageNumbers, title: options.title ?? null };
138
+ return { width, height, margin, media, maxPages, baseUrl: base.href, assets, assetResolver, fonts, pageNumbers,
139
+ useCSSPageSize: options.preferCSSPageSize === true || (options.format === undefined && options.width === undefined),
140
+ headerTemplate: options.headerTemplate ?? null, footerTemplate: options.footerTemplate ?? null, ...document };
134
141
  }
135
142
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Numbers are CSS pixels (96 px = 1 inch). */
2
2
  export type Length = number | `${number}${"px" | "pt" | "mm" | "cm" | "in"}`;
3
- export type PageFormat = "A3" | "A4" | "A5" | "Letter" | "Legal" | "Tabloid";
3
+ export type PageFormat = "A0" | "A1" | "A2" | "A3" | "A4" | "A5" | "A6" | "Letter" | "Legal" | "Tabloid" | "Ledger";
4
4
  export type BinaryData = Uint8Array | ArrayBuffer;
5
5
  /** UTF-8 text (for CSS/SVG) or binary resource contents. */
6
6
  export type AssetData = BinaryData | string;
@@ -20,9 +20,71 @@ export interface PageNumberOptions {
20
20
  /** Default: 12 CSS pixels (9pt). */
21
21
  fontSize?: Length;
22
22
  }
23
+ /** A Date or an ISO 8601 timestamp with an explicit timezone. Serialized in UTC to whole seconds. */
24
+ export type PdfDate = Date | string;
25
+ export type AttachmentRelationship = "Source" | "Data" | "Alternative" | "Supplement" | "Unspecified";
26
+ export interface PdfAttachment {
27
+ /** Unique filename, without directories. Unicode is supported. */
28
+ name: string;
29
+ /** File contents, not a path or URL. Strings are encoded as UTF-8. */
30
+ data: AssetData;
31
+ /** MIME type without parameters. Default: application/octet-stream. */
32
+ mimeType?: string;
33
+ /** Human-readable description. Default: name. */
34
+ description?: string;
35
+ /** PDF/A association with the whole document. Default: Unspecified. */
36
+ relationship?: AttachmentRelationship;
37
+ /** Default: the document modification date. */
38
+ modificationDate?: PdfDate;
39
+ /** Omit to let the engine choose whether compression helps. */
40
+ compress?: boolean;
41
+ }
42
+ /** A custom text property and its PDF/A schema description. */
43
+ export interface PdfXmpProperty {
44
+ /** XML local name, e.g. DocumentFileName. */
45
+ name: string;
46
+ value: string;
47
+ description: string;
48
+ /** Default: external (supplied by the user). */
49
+ category?: "internal" | "external";
50
+ }
51
+ /** Custom XMP text properties, emitted with their PDF/A extension schema. */
52
+ export interface PdfXmpSchema {
53
+ /** Human-readable schema name. */
54
+ name: string;
55
+ /** Absolute namespace URI, e.g. urn:example:documents:1.0#. */
56
+ namespaceUri: string;
57
+ /** Unique XML namespace prefix, e.g. acme. Built-in prefixes are reserved. */
58
+ prefix: string;
59
+ properties: readonly PdfXmpProperty[];
60
+ }
61
+ export interface PdfMetadata {
62
+ /** Overrides the legacy top-level title option. */
63
+ title?: string;
64
+ author?: string | readonly string[];
65
+ subject?: string;
66
+ keywords?: readonly string[];
67
+ /** Application that created the document. */
68
+ creator?: string;
69
+ /** Default: blitz-pdf and its version. */
70
+ producer?: string;
71
+ /** Document language, e.g. de-DE. */
72
+ language?: string;
73
+ /** Default: render start time. */
74
+ creationDate?: PdfDate;
75
+ /** Default: creationDate. Must not precede it. */
76
+ modificationDate?: PdfDate;
77
+ /** Stable input used to derive the PDF document ID across revisions. */
78
+ documentId?: string;
79
+ /** Up to 32 custom schemas / 256 text properties / 1 MiB combined. */
80
+ xmp?: readonly PdfXmpSchema[];
81
+ }
23
82
  export interface PdfOptions {
24
83
  /** Default: A4. Use width and height together for a custom page. */
25
84
  format?: PageFormat;
85
+ /** Let CSS @page size override explicit format/width/height. Default: false.
86
+ * Without explicit dimensions, CSS page size is always used when available. */
87
+ preferCSSPageSize?: boolean;
26
88
  width?: Length;
27
89
  height?: Length;
28
90
  landscape?: boolean;
@@ -43,8 +105,16 @@ export interface PdfOptions {
43
105
  fonts?: readonly BinaryData[];
44
106
  /** PDF document title. */
45
107
  title?: string;
108
+ /** Synchronized PDF information dictionary and XMP metadata. */
109
+ metadata?: PdfMetadata;
110
+ /** Direct file attachments. Maximum 100 files and 64 MiB combined. */
111
+ attachments?: readonly PdfAttachment[];
46
112
  /** Selectable page-number footer. Reserves space above the bottom margin. Default: false. */
47
113
  pageNumbers?: boolean | PageNumberOptions;
114
+ /** HTML rendered on every page inside the top margin. Styles are template-local. */
115
+ headerTemplate?: string;
116
+ /** HTML rendered on every page inside the bottom margin. Styles are template-local. */
117
+ footerTemplate?: string;
48
118
  /** Reject larger documents. Default: 100; maximum: 1000. */
49
119
  maxPages?: number;
50
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAClD,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAClH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7F,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAEzB,oEAAoE;IACpE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+GAA+G;IAC/G,MAAM,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAClC,2FAA2F;IAC3F,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AACpH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAClD,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAClH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7F,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qGAAqG;AACrG,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AACpC,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAEtG,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,SAAS,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CACpC;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,GAAG,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IAEzB,oEAAoE;IACpE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;mFAC+E;IAC/E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+GAA+G;IAC/G,MAAM,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAClC,2FAA2F;IAC3F,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC1C,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export declare function record(value: unknown, name: string): void;
2
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKzD"}
@@ -0,0 +1,7 @@
1
+ export function record(value, name) {
2
+ if (value === null || typeof value !== "object" || Array.isArray(value) ||
3
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value))) {
4
+ throw new TypeError(`${name} must be a plain object`);
5
+ }
6
+ }
7
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,IAAY;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,yBAAyB,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { readFile, mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { renderPdf } from "blitz-pdf";
5
+
6
+ // Use HTML and validated CII XML for the same invoice. This example packages
7
+ // supplied invoice data; it does not generate or validate business information.
8
+ const [htmlPath, xmlPath, profile, outputPath = "output/pdf/zugferd.pdf"] = process.argv.slice(2);
9
+ if (!htmlPath || !xmlPath || !profile) {
10
+ console.error('Usage: node examples/zugferd.mjs invoice.html invoice.xml "EN 16931" [output.pdf]');
11
+ process.exit(1);
12
+ }
13
+ if (!["MINIMUM", "BASIC WL", "BASIC", "EN 16931", "EXTENDED"].includes(profile)) {
14
+ throw new Error("Choose MINIMUM, BASIC WL, BASIC, EN 16931, or EXTENDED for this example");
15
+ }
16
+ const [html, xml] = await Promise.all([readFile(htmlPath, "utf8"), readFile(xmlPath)]);
17
+ const bytes = await renderPdf(html, {
18
+ format: "A4", margin: "15mm",
19
+ baseUrl: pathToFileURL(resolve(htmlPath)).href,
20
+ assets: async url => readFile(new URL(url)),
21
+ attachments: [{
22
+ name: "factur-x.xml", data: xml, mimeType: "text/xml", description: "Invoice XML",
23
+ relationship: ["MINIMUM", "BASIC WL"].includes(profile) ? "Data" : "Alternative",
24
+ }],
25
+ metadata: {
26
+ title: "Invoice", creator: "blitz-pdf invoice example", language: "de-DE",
27
+ xmp: [{
28
+ name: "Factur-X PDFA Extension Schema", prefix: "fx",
29
+ namespaceUri: "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#",
30
+ properties: [
31
+ { name: "DocumentFileName", value: "factur-x.xml", description: "Embedded invoice filename" },
32
+ { name: "DocumentType", value: "INVOICE", description: "Document type" },
33
+ { name: "Version", value: "1.0", description: "Schema version" },
34
+ { name: "ConformanceLevel", value: profile, description: "Invoice profile" },
35
+ ],
36
+ }],
37
+ },
38
+ });
39
+ await mkdir(dirname(resolve(outputPath)), { recursive: true });
40
+ await writeFile(outputPath, bytes);
41
+ console.log(`Created ${outputPath} (${bytes.length} bytes, PDF/A-3u with ${profile} Factur-X packaging).`);