@pdfme/generator 6.1.0 → 6.1.1-dev.5
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/dist/index.js +140 -38
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as pdfLib from "@pdfme/pdf-lib";
|
|
2
|
-
import { PDFDict, PDFDocument, PDFEmbeddedPage, PDFFont, PDFName, PDFPage, TextAlignment } from "@pdfme/pdf-lib";
|
|
3
|
-
import { checkGenerateProps, cloneDeep, getB64BasePdf, getDefaultFont, getDynamicTemplate, getFallbackFontName, isBlankPdf, mm2pt, pluginRegistry, pt2mm, replacePlaceholders } from "@pdfme/common";
|
|
4
|
-
import {
|
|
2
|
+
import { PDFArray, PDFDict, PDFDocument, PDFEmbeddedPage, PDFFont, PDFHexString, PDFName, PDFObjectCopier, PDFPage, PDFString, TextAlignment } from "@pdfme/pdf-lib";
|
|
3
|
+
import { applyInternalLinkAnnotations, checkGenerateProps, cloneDeep, getB64BasePdf, getDefaultFont, getDynamicTemplate, getFallbackFontName, isBlankPdf, mm2pt, normalizeSafeLinkUri, pluginRegistry, pt2mm, registerInternalLinkAnchor, replacePlaceholders, resetInternalLinkAnnotations } from "@pdfme/common";
|
|
4
|
+
import { getDynamicLayoutForTable } from "@pdfme/schemas/tables";
|
|
5
|
+
import { getDynamicLayoutForList } from "@pdfme/schemas/lists";
|
|
5
6
|
import * as fontkit from "fontkit";
|
|
6
7
|
import { builtInPlugins } from "@pdfme/schemas/builtins";
|
|
7
8
|
import { checkbox, radioGroup, text } from "@pdfme/schemas";
|
|
@@ -49,7 +50,8 @@ var getEmbedPdfPages = async (arg) => {
|
|
|
49
50
|
embedPdfBoxes = embedPdfPages.map((p) => ({
|
|
50
51
|
mediaBox: p.getMediaBox(),
|
|
51
52
|
bleedBox: p.getBleedBox(),
|
|
52
|
-
trimBox: p.getTrimBox()
|
|
53
|
+
trimBox: p.getTrimBox(),
|
|
54
|
+
sourcePage: p
|
|
53
55
|
}));
|
|
54
56
|
const boundingBoxes = embedPdfPages.map((p) => {
|
|
55
57
|
const { x, y, width, height } = p.getMediaBox();
|
|
@@ -75,6 +77,49 @@ var getEmbedPdfPages = async (arg) => {
|
|
|
75
77
|
embedPdfBoxes
|
|
76
78
|
};
|
|
77
79
|
};
|
|
80
|
+
var getSafeUriFromLinkAnnotation = (annotation) => {
|
|
81
|
+
if (annotation.lookupMaybe(PDFName.of("Subtype"), PDFName) !== PDFName.of("Link")) return;
|
|
82
|
+
const action = annotation.lookupMaybe(PDFName.of("A"), PDFDict);
|
|
83
|
+
if (!action) return;
|
|
84
|
+
if (action.lookupMaybe(PDFName.of("S"), PDFName) !== PDFName.of("URI")) return;
|
|
85
|
+
const uri = action.lookupMaybe(PDFName.of("URI"), PDFString, PDFHexString);
|
|
86
|
+
return uri ? normalizeSafeLinkUri(uri.decodeText()) : void 0;
|
|
87
|
+
};
|
|
88
|
+
var copyBasePdfUriLinkAnnotations = (arg) => {
|
|
89
|
+
const { sourcePage, targetPage, pdfDoc } = arg;
|
|
90
|
+
const sourceAnnots = sourcePage.node.Annots();
|
|
91
|
+
if (!sourceAnnots) return;
|
|
92
|
+
const copier = PDFObjectCopier.for(sourcePage.doc.context, pdfDoc.context);
|
|
93
|
+
for (let idx = 0; idx < sourceAnnots.size(); idx += 1) {
|
|
94
|
+
const sourceAnnotation = sourceAnnots.lookupMaybe(idx, PDFDict);
|
|
95
|
+
if (!sourceAnnotation) continue;
|
|
96
|
+
const safeUri = getSafeUriFromLinkAnnotation(sourceAnnotation);
|
|
97
|
+
if (!safeUri) continue;
|
|
98
|
+
const rect = sourceAnnotation.lookupMaybe(PDFName.of("Rect"), PDFArray);
|
|
99
|
+
if (!rect) continue;
|
|
100
|
+
const border = sourceAnnotation.lookupMaybe(PDFName.of("Border"), PDFArray);
|
|
101
|
+
const color = sourceAnnotation.lookupMaybe(PDFName.of("C"), PDFArray);
|
|
102
|
+
const highlightMode = sourceAnnotation.lookupMaybe(PDFName.of("H"), PDFName);
|
|
103
|
+
const copiedAnnotation = pdfDoc.context.obj({
|
|
104
|
+
Type: PDFName.of("Annot"),
|
|
105
|
+
Subtype: PDFName.of("Link"),
|
|
106
|
+
Rect: copier.copy(rect),
|
|
107
|
+
Border: border ? copier.copy(border) : pdfDoc.context.obj([
|
|
108
|
+
0,
|
|
109
|
+
0,
|
|
110
|
+
0
|
|
111
|
+
]),
|
|
112
|
+
C: color ? copier.copy(color) : void 0,
|
|
113
|
+
H: highlightMode ? copier.copy(highlightMode) : void 0,
|
|
114
|
+
A: {
|
|
115
|
+
Type: PDFName.of("Action"),
|
|
116
|
+
S: PDFName.of("URI"),
|
|
117
|
+
URI: PDFString.of(safeUri)
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
targetPage.node.addAnnot(pdfDoc.context.register(copiedAnnotation));
|
|
121
|
+
}
|
|
122
|
+
};
|
|
78
123
|
var validateRequiredFields = (template, inputs) => {
|
|
79
124
|
template.schemas.forEach((schemaPage) => schemaPage.forEach((schema) => {
|
|
80
125
|
if (schema.required && !schema.readOnly && !inputs.some((input) => input[schema.name])) throw new Error(`[@pdfme/generator] input for '${schema.name}' is required to generate this PDF`);
|
|
@@ -123,16 +168,73 @@ var insertPage = (arg) => {
|
|
|
123
168
|
insertedPage.setMediaBox(mediaBox.x, mediaBox.y, mediaBox.width, mediaBox.height);
|
|
124
169
|
insertedPage.setBleedBox(bleedBox.x, bleedBox.y, bleedBox.width, bleedBox.height);
|
|
125
170
|
insertedPage.setTrimBox(trimBox.x, trimBox.y, trimBox.width, trimBox.height);
|
|
171
|
+
if (embedPdfBox.sourcePage) copyBasePdfUriLinkAnnotations({
|
|
172
|
+
sourcePage: embedPdfBox.sourcePage,
|
|
173
|
+
targetPage: insertedPage,
|
|
174
|
+
pdfDoc
|
|
175
|
+
});
|
|
126
176
|
}
|
|
127
177
|
return insertedPage;
|
|
128
178
|
};
|
|
129
179
|
//#endregion
|
|
130
180
|
//#region src/generate.ts
|
|
181
|
+
var hasDynamicLayoutSchema = (schemas) => {
|
|
182
|
+
for (let i = 0; i < schemas.length; i += 1) {
|
|
183
|
+
const schemaPage = schemas[i];
|
|
184
|
+
for (let j = 0; j < schemaPage.length; j += 1) {
|
|
185
|
+
const schemaType = schemaPage[j].type;
|
|
186
|
+
if (schemaType === "table" || schemaType === "list") return true;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
};
|
|
191
|
+
var getSchemaRenderInfo = (schemas) => {
|
|
192
|
+
const schemaNameSet = /* @__PURE__ */ new Set();
|
|
193
|
+
const schemaPages = [];
|
|
194
|
+
for (let i = 0; i < schemas.length; i += 1) {
|
|
195
|
+
const schemaPage = schemas[i];
|
|
196
|
+
const schemaMap = /* @__PURE__ */ new Map();
|
|
197
|
+
for (let j = 0; j < schemaPage.length; j += 1) {
|
|
198
|
+
const schema = schemaPage[j];
|
|
199
|
+
if (!schema.name) continue;
|
|
200
|
+
schemaNameSet.add(schema.name);
|
|
201
|
+
if (!schemaMap.has(schema.name)) schemaMap.set(schema.name, schema);
|
|
202
|
+
}
|
|
203
|
+
schemaPages.push(schemaMap);
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
schemaNames: Array.from(schemaNameSet),
|
|
207
|
+
schemaPages
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
var getAdjustedSchema = (schema, boundingBoxLeft, boundingBoxBottom) => {
|
|
211
|
+
if (boundingBoxLeft === 0 && boundingBoxBottom === 0) return schema;
|
|
212
|
+
return {
|
|
213
|
+
...schema,
|
|
214
|
+
position: {
|
|
215
|
+
x: schema.position.x + boundingBoxLeft,
|
|
216
|
+
y: schema.position.y - boundingBoxBottom
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
var registerSchemaAnchor = (_cache, schema, page) => {
|
|
221
|
+
if (!schema.name) return;
|
|
222
|
+
registerInternalLinkAnchor({
|
|
223
|
+
_cache,
|
|
224
|
+
name: schema.name,
|
|
225
|
+
page,
|
|
226
|
+
x: mm2pt(schema.position.x),
|
|
227
|
+
y: page.getHeight() - mm2pt(schema.position.y)
|
|
228
|
+
});
|
|
229
|
+
};
|
|
131
230
|
var generate = async (props) => {
|
|
132
231
|
checkGenerateProps(props);
|
|
133
232
|
const { inputs, template: _template, options = {}, plugins: userPlugins = {} } = props;
|
|
134
233
|
const template = cloneDeep(_template);
|
|
135
234
|
const basePdf = template.basePdf;
|
|
235
|
+
const isBlankBasePdf = isBlankPdf(basePdf);
|
|
236
|
+
const staticSchemas = isBlankBasePdf ? basePdf.staticSchema ?? [] : [];
|
|
237
|
+
const shouldApplyDynamicTemplate = isBlankBasePdf && hasDynamicLayoutSchema(template.schemas);
|
|
136
238
|
if (inputs.length === 0) throw new Error("[@pdfme/generator] inputs should not be empty, pass at least an empty object in the array");
|
|
137
239
|
validateRequiredFields(template, inputs);
|
|
138
240
|
const { pdfDoc, renderObj } = await preprocessing({
|
|
@@ -140,32 +242,33 @@ var generate = async (props) => {
|
|
|
140
242
|
userPlugins
|
|
141
243
|
});
|
|
142
244
|
const _cache = /* @__PURE__ */ new Map();
|
|
245
|
+
const cachedEmbedPdfPages = isBlankBasePdf ? void 0 : await getEmbedPdfPages({
|
|
246
|
+
template,
|
|
247
|
+
pdfDoc
|
|
248
|
+
});
|
|
249
|
+
const cachedRenderInfo = shouldApplyDynamicTemplate ? void 0 : getSchemaRenderInfo(template.schemas);
|
|
143
250
|
for (let i = 0; i < inputs.length; i += 1) {
|
|
144
251
|
const input = inputs[i];
|
|
145
|
-
|
|
252
|
+
resetInternalLinkAnnotations(_cache);
|
|
253
|
+
const dynamicTemplate = shouldApplyDynamicTemplate ? await getDynamicTemplate({
|
|
146
254
|
template,
|
|
147
255
|
input,
|
|
148
256
|
options,
|
|
149
257
|
_cache,
|
|
150
258
|
getDynamicHeights: (value, args) => {
|
|
151
259
|
switch (args.schema.type) {
|
|
152
|
-
case "table": return
|
|
260
|
+
case "table": return getDynamicLayoutForTable(value, args);
|
|
261
|
+
case "list": return getDynamicLayoutForList(value, args);
|
|
153
262
|
default: return Promise.resolve([args.schema.height]);
|
|
154
263
|
}
|
|
155
264
|
}
|
|
156
|
-
});
|
|
157
|
-
const { basePages, embedPdfBoxes } = await getEmbedPdfPages({
|
|
265
|
+
}) : template;
|
|
266
|
+
const { basePages, embedPdfBoxes } = cachedEmbedPdfPages ?? await getEmbedPdfPages({
|
|
158
267
|
template: dynamicTemplate,
|
|
159
268
|
pdfDoc
|
|
160
269
|
});
|
|
161
270
|
const schemas = dynamicTemplate.schemas;
|
|
162
|
-
const
|
|
163
|
-
schemas.forEach((page) => {
|
|
164
|
-
page.forEach((schema) => {
|
|
165
|
-
if (schema.name) schemaNameSet.add(schema.name);
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
const schemaNames = Array.from(schemaNameSet);
|
|
271
|
+
const { schemaNames, schemaPages } = shouldApplyDynamicTemplate ? getSchemaRenderInfo(schemas) : cachedRenderInfo;
|
|
169
272
|
for (let j = 0; j < basePages.length; j += 1) {
|
|
170
273
|
const basePage = basePages[j];
|
|
171
274
|
const embedPdfBox = embedPdfBoxes[j];
|
|
@@ -176,26 +279,25 @@ var generate = async (props) => {
|
|
|
176
279
|
embedPdfBox,
|
|
177
280
|
pdfDoc
|
|
178
281
|
});
|
|
179
|
-
|
|
180
|
-
|
|
282
|
+
const variables = {
|
|
283
|
+
...input,
|
|
284
|
+
totalPages: basePages.length,
|
|
285
|
+
currentPage: j + 1
|
|
286
|
+
};
|
|
287
|
+
if (staticSchemas.length > 0) for (let k = 0; k < staticSchemas.length; k += 1) {
|
|
288
|
+
const staticSchema = staticSchemas[k];
|
|
181
289
|
const render = renderObj[staticSchema.type];
|
|
182
290
|
if (!render) continue;
|
|
183
291
|
const value = staticSchema.readOnly ? replacePlaceholders({
|
|
184
292
|
content: staticSchema.content || "",
|
|
185
|
-
variables
|
|
186
|
-
...input,
|
|
187
|
-
totalPages: basePages.length,
|
|
188
|
-
currentPage: j + 1
|
|
189
|
-
},
|
|
293
|
+
variables,
|
|
190
294
|
schemas
|
|
191
295
|
}) : staticSchema.content || "";
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
y: staticSchema.position.y - boundingBoxBottom
|
|
195
|
-
};
|
|
296
|
+
const adjustedStaticSchema = getAdjustedSchema(staticSchema, boundingBoxLeft, boundingBoxBottom);
|
|
297
|
+
registerSchemaAnchor(_cache, adjustedStaticSchema, page);
|
|
196
298
|
await render({
|
|
197
299
|
value,
|
|
198
|
-
schema:
|
|
300
|
+
schema: adjustedStaticSchema,
|
|
199
301
|
basePdf,
|
|
200
302
|
pdfLib,
|
|
201
303
|
pdfDoc,
|
|
@@ -204,28 +306,24 @@ var generate = async (props) => {
|
|
|
204
306
|
_cache
|
|
205
307
|
});
|
|
206
308
|
}
|
|
309
|
+
const schemaPage = schemaPages[j];
|
|
310
|
+
if (!schemaPage) continue;
|
|
207
311
|
for (let l = 0; l < schemaNames.length; l += 1) {
|
|
208
312
|
const name = schemaNames[l];
|
|
209
|
-
const schema =
|
|
313
|
+
const schema = schemaPage.get(name);
|
|
210
314
|
if (!schema) continue;
|
|
211
315
|
const render = renderObj[schema.type];
|
|
212
316
|
if (!render) continue;
|
|
213
317
|
const value = schema.readOnly ? replacePlaceholders({
|
|
214
318
|
content: schema.content || "",
|
|
215
|
-
variables
|
|
216
|
-
...input,
|
|
217
|
-
totalPages: basePages.length,
|
|
218
|
-
currentPage: j + 1
|
|
219
|
-
},
|
|
319
|
+
variables,
|
|
220
320
|
schemas
|
|
221
321
|
}) : input[name] || "";
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
y: schema.position.y - boundingBoxBottom
|
|
225
|
-
};
|
|
322
|
+
const adjustedSchema = getAdjustedSchema(schema, boundingBoxLeft, boundingBoxBottom);
|
|
323
|
+
registerSchemaAnchor(_cache, adjustedSchema, page);
|
|
226
324
|
await render({
|
|
227
325
|
value,
|
|
228
|
-
schema,
|
|
326
|
+
schema: adjustedSchema,
|
|
229
327
|
basePdf,
|
|
230
328
|
pdfLib,
|
|
231
329
|
pdfDoc,
|
|
@@ -235,6 +333,10 @@ var generate = async (props) => {
|
|
|
235
333
|
});
|
|
236
334
|
}
|
|
237
335
|
}
|
|
336
|
+
applyInternalLinkAnnotations({
|
|
337
|
+
_cache,
|
|
338
|
+
pdfDoc
|
|
339
|
+
});
|
|
238
340
|
}
|
|
239
341
|
postProcessing({
|
|
240
342
|
pdfDoc,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/constants.ts","../src/helper.ts","../src/generate.ts","../src/acroForm.ts","../src/generateForm.ts"],"sourcesContent":["export const TOOL_NAME = 'pdfme (https://pdfme.com/)';\n","import * as fontkit from 'fontkit';\nimport {\n Schema,\n Plugins,\n GeneratorOptions,\n Template,\n PDFRenderProps,\n getB64BasePdf,\n isBlankPdf,\n mm2pt,\n pluginRegistry,\n BasePdf,\n} from '@pdfme/common';\nimport { builtInPlugins } from '@pdfme/schemas/builtins';\nimport { PDFPage, PDFDocument, PDFEmbeddedPage, TransformationMatrix } from '@pdfme/pdf-lib';\nimport { TOOL_NAME } from './constants.js';\nimport type { EmbedPdfBox } from './types.js';\n\nexport const getEmbedPdfPages = async (arg: { template: Template; pdfDoc: PDFDocument }) => {\n const {\n template: { schemas, basePdf },\n pdfDoc,\n } = arg as { template: { schemas: Schema[][]; basePdf: BasePdf }; pdfDoc: PDFDocument };\n let basePages: (PDFEmbeddedPage | PDFPage)[] = [];\n let embedPdfBoxes: EmbedPdfBox[] = [];\n\n if (isBlankPdf(basePdf)) {\n const { width: _width, height: _height } = basePdf;\n const width = mm2pt(_width);\n const height = mm2pt(_height);\n basePages = schemas.map(() => {\n const page = PDFPage.create(pdfDoc);\n page.setSize(width, height);\n return page;\n });\n embedPdfBoxes = schemas.map(() => ({\n mediaBox: { x: 0, y: 0, width, height },\n bleedBox: { x: 0, y: 0, width, height },\n trimBox: { x: 0, y: 0, width, height },\n }));\n } else {\n const willLoadPdf = await getB64BasePdf(basePdf);\n const embedPdf = await PDFDocument.load(willLoadPdf);\n const embedPdfPages = embedPdf.getPages();\n embedPdfBoxes = embedPdfPages.map((p) => ({\n mediaBox: p.getMediaBox(),\n bleedBox: p.getBleedBox(),\n trimBox: p.getTrimBox(),\n }));\n const boundingBoxes = embedPdfPages.map((p) => {\n const { x, y, width, height } = p.getMediaBox();\n return { left: x, bottom: y, right: width, top: height + y };\n });\n const transformationMatrices = embedPdfPages.map(\n () => [1, 0, 0, 1, 0, 0] as TransformationMatrix,\n );\n basePages = await pdfDoc.embedPages(embedPdfPages, boundingBoxes, transformationMatrices);\n }\n return { basePages, embedPdfBoxes };\n};\n\nexport const validateRequiredFields = (template: Template, inputs: Record<string, unknown>[]) => {\n template.schemas.forEach((schemaPage: Schema[]) =>\n schemaPage.forEach((schema: Schema) => {\n if (schema.required && !schema.readOnly && !inputs.some((input) => input[schema.name])) {\n throw new Error(\n `[@pdfme/generator] input for '${schema.name}' is required to generate this PDF`,\n );\n }\n }),\n );\n};\n\nexport const preprocessing = async (arg: { template: Template; userPlugins: Plugins }) => {\n const { template, userPlugins } = arg;\n const { schemas, basePdf } = template as { schemas: Schema[][]; basePdf: BasePdf };\n const staticSchema: Schema[] = isBlankPdf(basePdf) ? (basePdf.staticSchema ?? []) : [];\n\n const pdfDoc = await PDFDocument.create();\n // @ts-expect-error registerFontkit method is not in type definitions but exists at runtime\n pdfDoc.registerFontkit(fontkit);\n\n const plugins = pluginRegistry(\n Object.values(userPlugins).length > 0 ? userPlugins : builtInPlugins,\n );\n\n const schemaTypes = Array.from(\n new Set(\n schemas\n .flatMap((schemaPage: Schema[]) => schemaPage.map((schema: Schema) => schema.type))\n .concat(staticSchema.map((schema: Schema) => schema.type)),\n ),\n );\n\n const renderObj = schemaTypes.reduce(\n (\n acc: Record<\n string,\n (arg: PDFRenderProps<Schema & { [key: string]: unknown }>) => Promise<void> | void\n >,\n type: string,\n ) => {\n const plugin = plugins.findByType(type);\n\n if (!plugin || !plugin.pdf) {\n throw new Error(`[@pdfme/generator] Plugin or renderer for type ${type} not found.\nCheck this document: https://pdfme.com/docs/custom-schemas`);\n }\n\n // Use type assertion to handle the pdf function with schema type\n return {\n ...acc,\n [type]: plugin.pdf as (\n arg: PDFRenderProps<Schema & { [key: string]: unknown }>,\n ) => Promise<void> | void,\n };\n },\n {} as Record<\n string,\n (arg: PDFRenderProps<Schema & { [key: string]: unknown }>) => Promise<void> | void\n >,\n );\n\n return { pdfDoc, renderObj };\n};\n\nexport const postProcessing = (props: { pdfDoc: PDFDocument; options: GeneratorOptions }) => {\n const { pdfDoc, options } = props;\n const {\n author = TOOL_NAME,\n creationDate = new Date(),\n creator = TOOL_NAME,\n keywords = [],\n lang = 'en',\n modificationDate = new Date(),\n producer = TOOL_NAME,\n subject = '',\n title = '',\n } = options;\n pdfDoc.setAuthor(author);\n pdfDoc.setCreationDate(creationDate);\n pdfDoc.setCreator(creator);\n pdfDoc.setKeywords(keywords);\n pdfDoc.setLanguage(lang);\n pdfDoc.setModificationDate(modificationDate);\n pdfDoc.setProducer(producer);\n pdfDoc.setSubject(subject);\n pdfDoc.setTitle(title);\n};\n\nexport const insertPage = (arg: {\n basePage: PDFEmbeddedPage | PDFPage;\n embedPdfBox: EmbedPdfBox;\n pdfDoc: PDFDocument;\n}) => {\n const { basePage, embedPdfBox, pdfDoc } = arg;\n const size = basePage instanceof PDFEmbeddedPage ? basePage.size() : basePage.getSize();\n const insertedPage =\n basePage instanceof PDFEmbeddedPage\n ? pdfDoc.addPage([size.width, size.height])\n : pdfDoc.addPage(basePage);\n\n if (basePage instanceof PDFEmbeddedPage) {\n insertedPage.drawPage(basePage);\n const { mediaBox, bleedBox, trimBox } = embedPdfBox;\n insertedPage.setMediaBox(mediaBox.x, mediaBox.y, mediaBox.width, mediaBox.height);\n insertedPage.setBleedBox(bleedBox.x, bleedBox.y, bleedBox.width, bleedBox.height);\n insertedPage.setTrimBox(trimBox.x, trimBox.y, trimBox.width, trimBox.height);\n }\n\n return insertedPage;\n};\n","import * as pdfLib from '@pdfme/pdf-lib';\nimport type { GenerateProps, Schema, PDFRenderProps, Template } from '@pdfme/common';\nimport {\n checkGenerateProps,\n getDynamicTemplate,\n isBlankPdf,\n replacePlaceholders,\n pt2mm,\n cloneDeep,\n} from '@pdfme/common';\nimport { getDynamicHeightsForTable } from '@pdfme/schemas/tables';\nimport {\n insertPage,\n preprocessing,\n postProcessing,\n getEmbedPdfPages,\n validateRequiredFields,\n} from './helper.js';\n\nconst generate = async (props: GenerateProps): Promise<Uint8Array<ArrayBuffer>> => {\n checkGenerateProps(props);\n const { inputs, template: _template, options = {}, plugins: userPlugins = {} } = props;\n const template = cloneDeep(_template);\n\n const basePdf = template.basePdf;\n\n if (inputs.length === 0) {\n throw new Error(\n '[@pdfme/generator] inputs should not be empty, pass at least an empty object in the array',\n );\n }\n\n validateRequiredFields(template, inputs);\n\n const { pdfDoc, renderObj } = await preprocessing({ template, userPlugins });\n\n const _cache = new Map<string, unknown>();\n\n for (let i = 0; i < inputs.length; i += 1) {\n const input = inputs[i];\n\n // Get the dynamic template with proper typing\n const dynamicTemplate: Template = await getDynamicTemplate({\n template,\n input,\n options,\n _cache,\n getDynamicHeights: (value, args) => {\n switch (args.schema.type) {\n case 'table':\n return getDynamicHeightsForTable(value, args);\n default:\n return Promise.resolve([args.schema.height]);\n }\n },\n });\n const { basePages, embedPdfBoxes } = await getEmbedPdfPages({\n template: dynamicTemplate,\n pdfDoc,\n });\n\n const schemas = dynamicTemplate.schemas;\n // Create a type-safe array of schema names without using Set spread which requires downlevelIteration\n const schemaNameSet = new Set<string>();\n schemas.forEach((page: Schema[]) => {\n page.forEach((schema: Schema) => {\n if (schema.name) {\n schemaNameSet.add(schema.name);\n }\n });\n });\n const schemaNames = Array.from(schemaNameSet);\n\n for (let j = 0; j < basePages.length; j += 1) {\n const basePage = basePages[j];\n const embedPdfBox = embedPdfBoxes[j];\n\n const boundingBoxLeft =\n basePage instanceof pdfLib.PDFEmbeddedPage ? pt2mm(embedPdfBox.mediaBox.x) : 0;\n const boundingBoxBottom =\n basePage instanceof pdfLib.PDFEmbeddedPage ? pt2mm(embedPdfBox.mediaBox.y) : 0;\n\n const page = insertPage({ basePage, embedPdfBox, pdfDoc });\n\n if (isBlankPdf(basePdf) && basePdf.staticSchema) {\n for (let k = 0; k < basePdf.staticSchema.length; k += 1) {\n const staticSchema = basePdf.staticSchema[k];\n const render = renderObj[staticSchema.type];\n if (!render) {\n continue;\n }\n const value = staticSchema.readOnly\n ? replacePlaceholders({\n content: staticSchema.content || '',\n variables: { ...input, totalPages: basePages.length, currentPage: j + 1 },\n schemas: schemas, // Use the properly typed schemas variable\n })\n : staticSchema.content || '';\n\n staticSchema.position = {\n x: staticSchema.position.x + boundingBoxLeft,\n y: staticSchema.position.y - boundingBoxBottom,\n };\n\n // Create properly typed render props for static schema\n const staticRenderProps: PDFRenderProps<Schema> = {\n value,\n schema: staticSchema,\n basePdf,\n pdfLib,\n pdfDoc,\n page,\n options,\n _cache,\n };\n await render(staticRenderProps);\n }\n }\n\n for (let l = 0; l < schemaNames.length; l += 1) {\n const name = schemaNames[l];\n const schemaPage = schemas[j] || [];\n const schema = schemaPage.find((s: Schema) => s.name == name);\n if (!schema) {\n continue;\n }\n\n const render = renderObj[schema.type];\n if (!render) {\n continue;\n }\n const value: string = schema.readOnly\n ? replacePlaceholders({\n content: schema.content || '',\n variables: { ...input, totalPages: basePages.length, currentPage: j + 1 },\n schemas: schemas, // Use the properly typed schemas variable\n })\n : ((input[name] || '') as string);\n\n schema.position = {\n x: schema.position.x + boundingBoxLeft,\n y: schema.position.y - boundingBoxBottom,\n };\n\n // Create properly typed render props\n const renderProps: PDFRenderProps<Schema> = {\n value,\n schema,\n basePdf,\n pdfLib,\n pdfDoc,\n page,\n options,\n _cache,\n };\n await render(renderProps);\n }\n }\n }\n\n postProcessing({ pdfDoc, options });\n\n return pdfDoc.save();\n};\n\nexport default generate;\n","import {\n getDefaultFont,\n getFallbackFontName,\n type Font,\n type PDFRenderProps,\n type Plugin,\n type Schema,\n} from '@pdfme/common';\nimport {\n PDFDict,\n PDFDocument,\n PDFFont,\n PDFName,\n TextAlignment,\n type PDFRadioGroup,\n} from '@pdfme/pdf-lib';\nimport { convertForPdfLayoutProps, hex2PrintingColor } from '@pdfme/schemas/utils';\n\ntype AcroFormSchema = Schema & {\n __acroRequired?: boolean;\n};\n\ntype AcroTextSchema = AcroFormSchema & {\n alignment?: 'left' | 'center' | 'right' | 'justify';\n backgroundColor?: string;\n fontColor?: string;\n fontName?: string;\n fontSize?: number;\n};\n\ntype AcroCheckboxSchema = AcroFormSchema & {\n backgroundColor?: string;\n color?: string;\n};\n\ntype AcroRadioGroupSchema = AcroFormSchema & {\n __acroPageIndex?: number;\n backgroundColor?: string;\n color?: string;\n group?: string;\n};\n\ntype RadioGroupCacheState = {\n optionKeys: Set<string>;\n radioGroup: PDFRadioGroup;\n};\n\nconst DEFAULT_FONT_COLOR = '#000000';\nconst DEFAULT_FONT_SIZE = 13;\nconst DEFAULT_FORM_BORDER_COLOR = '#000000';\nconst FIELD_NAME_COUNTS_CACHE_KEY = 'generateForm:fieldNameCounts';\nconst RADIO_GROUPS_CACHE_KEY = 'generateForm:radioGroups';\n\nconst getNextFieldName = (baseName: string, cache: PDFRenderProps<Schema>['_cache']) => {\n const normalizedBaseName = baseName.trim() || 'field';\n const counts =\n (cache.get(FIELD_NAME_COUNTS_CACHE_KEY) as Map<string, number> | undefined) ??\n new Map<string, number>();\n const count = (counts.get(normalizedBaseName) ?? 0) + 1;\n\n counts.set(normalizedBaseName, count);\n cache.set(FIELD_NAME_COUNTS_CACHE_KEY, counts);\n\n return count === 1 ? normalizedBaseName : `${normalizedBaseName}_${count}`;\n};\n\nconst getFieldName = (schema: Schema, cache: PDFRenderProps<Schema>['_cache']) =>\n getNextFieldName(schema.name, cache);\n\nconst getRadioOptionName = (schema: Schema) => schema.name.trim() || 'option';\n\nconst getRadioGroupName = (schema: AcroRadioGroupSchema) =>\n (schema.group || schema.name).trim() || 'radioGroup';\n\nconst getRadioGroup = (arg: {\n pdfDoc: PDFDocument;\n schema: AcroRadioGroupSchema;\n _cache: PDFRenderProps<Schema>['_cache'];\n}) => {\n const { pdfDoc, schema, _cache } = arg;\n const baseName = getRadioGroupName(schema);\n const optionKey = `${schema.__acroPageIndex ?? 0}:${getRadioOptionName(schema)}`;\n const radioGroups =\n (_cache.get(RADIO_GROUPS_CACHE_KEY) as Map<string, RadioGroupCacheState> | undefined) ??\n new Map<string, RadioGroupCacheState>();\n\n const cached = radioGroups.get(baseName);\n if (cached && !cached.optionKeys.has(optionKey)) {\n cached.optionKeys.add(optionKey);\n return cached.radioGroup;\n }\n\n const radioGroup = pdfDoc.getForm().createRadioGroup(getNextFieldName(baseName, _cache));\n const state = { optionKeys: new Set([optionKey]), radioGroup };\n radioGroups.set(baseName, state);\n _cache.set(RADIO_GROUPS_CACHE_KEY, radioGroups);\n return radioGroup;\n};\n\nconst fetchFontData = async (font: Font, fontName: string) => {\n const fontValue = font[fontName];\n if (!fontValue) {\n throw new Error(`[@pdfme/generator] Font \"${fontName}\" is not configured`);\n }\n\n if (typeof fontValue.data !== 'string' || !fontValue.data.startsWith('http')) {\n return fontValue.data;\n }\n\n const res = await fetch(fontValue.data);\n if (!res.ok) {\n throw new Error(`[@pdfme/generator] Failed to fetch font data from ${fontValue.data}`);\n }\n return res.arrayBuffer();\n};\n\nconst getPdfFont = async (arg: {\n pdfDoc: PDFDocument;\n font: Font;\n fontName: string;\n _cache: PDFRenderProps<Schema>['_cache'];\n}) => {\n const { pdfDoc, font, fontName, _cache } = arg;\n const cacheKey = `generateForm:font:${fontName}`;\n const cached = _cache.get(cacheKey);\n if (cached instanceof PDFFont) {\n return cached;\n }\n\n const pdfFont = await pdfDoc.embedFont(await fetchFontData(font, fontName), {\n subset: font[fontName]?.subset ?? true,\n });\n _cache.set(cacheKey, pdfFont);\n return pdfFont;\n};\n\nconst registerAcroFormFontResource = (pdfDoc: PDFDocument, pdfFont: PDFFont) => {\n const formDict = pdfDoc.getForm().acroForm.dict;\n const context = formDict.context;\n\n const defaultResourcesKey = PDFName.of('DR');\n const fontResourcesKey = PDFName.of('Font');\n let defaultResources = formDict.lookupMaybe(defaultResourcesKey, PDFDict);\n if (!defaultResources) {\n defaultResources = context.obj({});\n formDict.set(defaultResourcesKey, defaultResources);\n }\n\n let fontResources = defaultResources.lookupMaybe(fontResourcesKey, PDFDict);\n if (!fontResources) {\n fontResources = context.obj({});\n defaultResources.set(fontResourcesKey, fontResources);\n }\n\n fontResources.set(PDFName.of(pdfFont.name), pdfFont.ref);\n};\n\nconst getTextAlignment = (alignment: AcroTextSchema['alignment']) => {\n switch (alignment) {\n case 'center':\n return TextAlignment.Center;\n case 'right':\n return TextAlignment.Right;\n default:\n return TextAlignment.Left;\n }\n};\n\nconst renderAcroText = async (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const textSchema = schema as AcroTextSchema;\n const font = options.font ?? getDefaultFont();\n const fontName =\n textSchema.fontName && font[textSchema.fontName]\n ? textSchema.fontName\n : getFallbackFontName(font);\n const pdfFont = await getPdfFont({ pdfDoc, font, fontName, _cache });\n registerAcroFormFontResource(pdfDoc, pdfFont);\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const textField = pdfDoc.getForm().createTextField(getFieldName(schema, _cache));\n\n textField.setText(value || undefined);\n textField.setAlignment(getTextAlignment(textSchema.alignment));\n textField.enableMultiline();\n if (textSchema.__acroRequired) textField.enableRequired();\n\n textField.addToPage(page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n font: pdfFont,\n textColor: hex2PrintingColor(textSchema.fontColor || DEFAULT_FONT_COLOR, options.colorType),\n backgroundColor: textSchema.backgroundColor\n ? hex2PrintingColor(textSchema.backgroundColor, options.colorType)\n : undefined,\n borderWidth: 0,\n });\n textField.setFontSize(textSchema.fontSize ?? DEFAULT_FONT_SIZE);\n textField.updateAppearances(pdfFont);\n};\n\nconst renderAcroCheckbox = (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const checkboxSchema = schema as AcroCheckboxSchema;\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const checkBox = pdfDoc.getForm().createCheckBox(getFieldName(schema, _cache));\n if (value === 'true') checkBox.check();\n if (checkboxSchema.__acroRequired) checkBox.enableRequired();\n\n const color = checkboxSchema.color || DEFAULT_FORM_BORDER_COLOR;\n checkBox.addToPage(page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n textColor: hex2PrintingColor(color, options.colorType),\n backgroundColor: checkboxSchema.backgroundColor\n ? hex2PrintingColor(checkboxSchema.backgroundColor, options.colorType)\n : undefined,\n borderColor: hex2PrintingColor(color, options.colorType),\n borderWidth: 1,\n });\n checkBox.updateAppearances();\n};\n\nconst renderAcroRadioGroup = (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const radioGroupSchema = schema as AcroRadioGroupSchema;\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const radioGroup = getRadioGroup({ pdfDoc, schema: radioGroupSchema, _cache });\n const color = radioGroupSchema.color || DEFAULT_FORM_BORDER_COLOR;\n const optionName = getRadioOptionName(schema);\n\n if (radioGroupSchema.__acroRequired) radioGroup.enableRequired();\n\n radioGroup.addOptionToPage(optionName, page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n textColor: hex2PrintingColor(color, options.colorType),\n backgroundColor: radioGroupSchema.backgroundColor\n ? hex2PrintingColor(radioGroupSchema.backgroundColor, options.colorType)\n : undefined,\n borderColor: hex2PrintingColor(color, options.colorType),\n borderWidth: 1,\n });\n\n if (value === 'true') radioGroup.select(optionName);\n radioGroup.updateAppearances();\n};\n\nexport const acroTextPlugin: Plugin = {\n pdf: renderAcroText,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroText',\n position: { x: 0, y: 0 },\n width: 10,\n height: 10,\n },\n },\n};\n\nexport const acroRadioGroupPlugin: Plugin = {\n pdf: renderAcroRadioGroup,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroRadioGroup',\n position: { x: 0, y: 0 },\n width: 8,\n height: 8,\n },\n },\n};\n\nexport const acroCheckboxPlugin: Plugin = {\n pdf: renderAcroCheckbox,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroCheckbox',\n position: { x: 0, y: 0 },\n width: 8,\n height: 8,\n },\n },\n};\n","import type { GenerateProps, Plugins, Schema, Template } from '@pdfme/common';\nimport { cloneDeep } from '@pdfme/common';\nimport { checkbox, radioGroup, text } from '@pdfme/schemas';\nimport { acroCheckboxPlugin, acroRadioGroupPlugin, acroTextPlugin } from './acroForm.js';\nimport generate from './generate.js';\n\nexport type GenerateFormProps = Omit<GenerateProps, 'inputs'> & {\n inputs?: GenerateProps['inputs'];\n};\n\nconst ACRO_TEXT_TYPE = 'acroText';\nconst ACRO_CHECKBOX_TYPE = 'acroCheckbox';\nconst ACRO_RADIO_GROUP_TYPE = 'acroRadioGroup';\nconst TEXT_TYPE = 'text';\nconst CHECKBOX_TYPE = 'checkbox';\nconst RADIO_GROUP_TYPE = 'radioGroup';\n\nconst hasPluginForType = (plugins: Plugins, type: string) =>\n Object.values(plugins).some((plugin) => plugin.propPanel.defaultSchema.type === type);\n\nconst withAcroFormPlugins = (plugins: Plugins = {}) => {\n const mergedPlugins = { ...plugins };\n\n if (!hasPluginForType(mergedPlugins, TEXT_TYPE)) {\n mergedPlugins.Text = text;\n }\n\n if (!hasPluginForType(mergedPlugins, CHECKBOX_TYPE)) {\n mergedPlugins.Checkbox = checkbox;\n }\n\n if (!hasPluginForType(mergedPlugins, RADIO_GROUP_TYPE)) {\n mergedPlugins.RadioGroup = radioGroup;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_TEXT_TYPE)) {\n mergedPlugins.AcroText = acroTextPlugin;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_CHECKBOX_TYPE)) {\n mergedPlugins.AcroCheckbox = acroCheckboxPlugin;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_RADIO_GROUP_TYPE)) {\n mergedPlugins.AcroRadioGroup = acroRadioGroupPlugin;\n }\n\n return mergedPlugins;\n};\n\nconst toAcroFormSchema = (schema: Schema, pageIndex: number): Schema => {\n if (schema.readOnly) {\n return schema;\n }\n\n const formSchema = schema.required ? { ...schema, required: false } : schema;\n\n if (schema.type === TEXT_TYPE) {\n return { ...formSchema, type: ACRO_TEXT_TYPE, __acroRequired: schema.required };\n }\n if (schema.type === CHECKBOX_TYPE) {\n return { ...formSchema, type: ACRO_CHECKBOX_TYPE, __acroRequired: schema.required };\n }\n if (schema.type === RADIO_GROUP_TYPE) {\n return {\n ...formSchema,\n type: ACRO_RADIO_GROUP_TYPE,\n __acroPageIndex: pageIndex,\n __acroRequired: schema.required,\n };\n }\n\n return formSchema;\n};\n\nconst getAcroFormTemplate = (template: Template): Template => {\n const clonedTemplate = cloneDeep(template);\n clonedTemplate.schemas = clonedTemplate.schemas.map((page, pageIndex) =>\n page.map((schema) => toAcroFormSchema(schema, pageIndex)),\n );\n return clonedTemplate;\n};\n\nconst normalizeInputs = (inputs?: GenerateProps['inputs']) =>\n inputs && inputs.length > 0 ? inputs : [{}];\n\nconst generateForm = async (props: GenerateFormProps): Promise<Uint8Array<ArrayBuffer>> => {\n return generate({\n ...props,\n inputs: normalizeInputs(props.inputs),\n template: getAcroFormTemplate(props.template),\n plugins: withAcroFormPlugins(props.plugins),\n });\n};\n\nexport default generateForm;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/constants.ts","../src/helper.ts","../src/generate.ts","../src/acroForm.ts","../src/generateForm.ts"],"sourcesContent":["export const TOOL_NAME = 'pdfme (https://pdfme.com/)';\n","import * as fontkit from 'fontkit';\nimport {\n Schema,\n Plugins,\n GeneratorOptions,\n Template,\n PDFRenderProps,\n getB64BasePdf,\n isBlankPdf,\n mm2pt,\n normalizeSafeLinkUri,\n pluginRegistry,\n BasePdf,\n} from '@pdfme/common';\nimport { builtInPlugins } from '@pdfme/schemas/builtins';\nimport {\n PDFPage,\n PDFDocument,\n PDFEmbeddedPage,\n TransformationMatrix,\n PDFDict,\n PDFName,\n PDFArray,\n PDFObjectCopier,\n PDFString,\n PDFHexString,\n} from '@pdfme/pdf-lib';\nimport { TOOL_NAME } from './constants.js';\nimport type { EmbedPdfBox } from './types.js';\n\nexport const getEmbedPdfPages = async (arg: { template: Template; pdfDoc: PDFDocument }) => {\n const {\n template: { schemas, basePdf },\n pdfDoc,\n } = arg as { template: { schemas: Schema[][]; basePdf: BasePdf }; pdfDoc: PDFDocument };\n let basePages: (PDFEmbeddedPage | PDFPage)[] = [];\n let embedPdfBoxes: EmbedPdfBox[] = [];\n\n if (isBlankPdf(basePdf)) {\n const { width: _width, height: _height } = basePdf;\n const width = mm2pt(_width);\n const height = mm2pt(_height);\n basePages = schemas.map(() => {\n const page = PDFPage.create(pdfDoc);\n page.setSize(width, height);\n return page;\n });\n embedPdfBoxes = schemas.map(() => ({\n mediaBox: { x: 0, y: 0, width, height },\n bleedBox: { x: 0, y: 0, width, height },\n trimBox: { x: 0, y: 0, width, height },\n }));\n } else {\n const willLoadPdf = await getB64BasePdf(basePdf);\n const embedPdf = await PDFDocument.load(willLoadPdf);\n const embedPdfPages = embedPdf.getPages();\n embedPdfBoxes = embedPdfPages.map((p) => ({\n mediaBox: p.getMediaBox(),\n bleedBox: p.getBleedBox(),\n trimBox: p.getTrimBox(),\n sourcePage: p,\n }));\n const boundingBoxes = embedPdfPages.map((p) => {\n const { x, y, width, height } = p.getMediaBox();\n return { left: x, bottom: y, right: width, top: height + y };\n });\n const transformationMatrices = embedPdfPages.map(\n () => [1, 0, 0, 1, 0, 0] as TransformationMatrix,\n );\n basePages = await pdfDoc.embedPages(embedPdfPages, boundingBoxes, transformationMatrices);\n }\n return { basePages, embedPdfBoxes };\n};\n\nconst getSafeUriFromLinkAnnotation = (annotation: PDFDict) => {\n if (annotation.lookupMaybe(PDFName.of('Subtype'), PDFName) !== PDFName.of('Link')) return;\n\n const action = annotation.lookupMaybe(PDFName.of('A'), PDFDict);\n if (!action) return;\n\n if (action.lookupMaybe(PDFName.of('S'), PDFName) !== PDFName.of('URI')) return;\n\n const uri = action.lookupMaybe(PDFName.of('URI'), PDFString, PDFHexString);\n return uri ? normalizeSafeLinkUri(uri.decodeText()) : undefined;\n};\n\nconst copyBasePdfUriLinkAnnotations = (arg: {\n sourcePage: PDFPage;\n targetPage: PDFPage;\n pdfDoc: PDFDocument;\n}) => {\n const { sourcePage, targetPage, pdfDoc } = arg;\n const sourceAnnots = sourcePage.node.Annots();\n if (!sourceAnnots) return;\n\n const copier = PDFObjectCopier.for(sourcePage.doc.context, pdfDoc.context);\n\n for (let idx = 0; idx < sourceAnnots.size(); idx += 1) {\n const sourceAnnotation = sourceAnnots.lookupMaybe(idx, PDFDict);\n if (!sourceAnnotation) continue;\n\n const safeUri = getSafeUriFromLinkAnnotation(sourceAnnotation);\n if (!safeUri) continue;\n const rect = sourceAnnotation.lookupMaybe(PDFName.of('Rect'), PDFArray);\n if (!rect) continue;\n\n const border = sourceAnnotation.lookupMaybe(PDFName.of('Border'), PDFArray);\n const color = sourceAnnotation.lookupMaybe(PDFName.of('C'), PDFArray);\n const highlightMode = sourceAnnotation.lookupMaybe(PDFName.of('H'), PDFName);\n\n // Preserve the clickable area and common link hints, but rebuild the URI action so page-bound\n // or unsafe source annotation data is not copied into the generated document.\n const copiedAnnotation = pdfDoc.context.obj({\n Type: PDFName.of('Annot'),\n Subtype: PDFName.of('Link'),\n Rect: copier.copy(rect),\n Border: border ? copier.copy(border) : pdfDoc.context.obj([0, 0, 0]),\n C: color ? copier.copy(color) : undefined,\n H: highlightMode ? copier.copy(highlightMode) : undefined,\n A: {\n Type: PDFName.of('Action'),\n S: PDFName.of('URI'),\n URI: PDFString.of(safeUri),\n },\n });\n\n targetPage.node.addAnnot(pdfDoc.context.register(copiedAnnotation));\n }\n};\n\nexport const validateRequiredFields = (template: Template, inputs: Record<string, unknown>[]) => {\n template.schemas.forEach((schemaPage: Schema[]) =>\n schemaPage.forEach((schema: Schema) => {\n if (schema.required && !schema.readOnly && !inputs.some((input) => input[schema.name])) {\n throw new Error(\n `[@pdfme/generator] input for '${schema.name}' is required to generate this PDF`,\n );\n }\n }),\n );\n};\n\nexport const preprocessing = async (arg: { template: Template; userPlugins: Plugins }) => {\n const { template, userPlugins } = arg;\n const { schemas, basePdf } = template as { schemas: Schema[][]; basePdf: BasePdf };\n const staticSchema: Schema[] = isBlankPdf(basePdf) ? (basePdf.staticSchema ?? []) : [];\n\n const pdfDoc = await PDFDocument.create();\n // @ts-expect-error registerFontkit method is not in type definitions but exists at runtime\n pdfDoc.registerFontkit(fontkit);\n\n const plugins = pluginRegistry(\n Object.values(userPlugins).length > 0 ? userPlugins : builtInPlugins,\n );\n\n const schemaTypes = Array.from(\n new Set(\n schemas\n .flatMap((schemaPage: Schema[]) => schemaPage.map((schema: Schema) => schema.type))\n .concat(staticSchema.map((schema: Schema) => schema.type)),\n ),\n );\n\n const renderObj = schemaTypes.reduce(\n (\n acc: Record<\n string,\n (arg: PDFRenderProps<Schema & { [key: string]: unknown }>) => Promise<void> | void\n >,\n type: string,\n ) => {\n const plugin = plugins.findByType(type);\n\n if (!plugin || !plugin.pdf) {\n throw new Error(`[@pdfme/generator] Plugin or renderer for type ${type} not found.\nCheck this document: https://pdfme.com/docs/custom-schemas`);\n }\n\n // Use type assertion to handle the pdf function with schema type\n return {\n ...acc,\n [type]: plugin.pdf as (\n arg: PDFRenderProps<Schema & { [key: string]: unknown }>,\n ) => Promise<void> | void,\n };\n },\n {} as Record<\n string,\n (arg: PDFRenderProps<Schema & { [key: string]: unknown }>) => Promise<void> | void\n >,\n );\n\n return { pdfDoc, renderObj };\n};\n\nexport const postProcessing = (props: { pdfDoc: PDFDocument; options: GeneratorOptions }) => {\n const { pdfDoc, options } = props;\n const {\n author = TOOL_NAME,\n creationDate = new Date(),\n creator = TOOL_NAME,\n keywords = [],\n lang = 'en',\n modificationDate = new Date(),\n producer = TOOL_NAME,\n subject = '',\n title = '',\n } = options;\n pdfDoc.setAuthor(author);\n pdfDoc.setCreationDate(creationDate);\n pdfDoc.setCreator(creator);\n pdfDoc.setKeywords(keywords);\n pdfDoc.setLanguage(lang);\n pdfDoc.setModificationDate(modificationDate);\n pdfDoc.setProducer(producer);\n pdfDoc.setSubject(subject);\n pdfDoc.setTitle(title);\n};\n\nexport const insertPage = (arg: {\n basePage: PDFEmbeddedPage | PDFPage;\n embedPdfBox: EmbedPdfBox;\n pdfDoc: PDFDocument;\n}) => {\n const { basePage, embedPdfBox, pdfDoc } = arg;\n const size = basePage instanceof PDFEmbeddedPage ? basePage.size() : basePage.getSize();\n const insertedPage =\n basePage instanceof PDFEmbeddedPage\n ? pdfDoc.addPage([size.width, size.height])\n : pdfDoc.addPage(basePage);\n\n if (basePage instanceof PDFEmbeddedPage) {\n insertedPage.drawPage(basePage);\n const { mediaBox, bleedBox, trimBox } = embedPdfBox;\n insertedPage.setMediaBox(mediaBox.x, mediaBox.y, mediaBox.width, mediaBox.height);\n insertedPage.setBleedBox(bleedBox.x, bleedBox.y, bleedBox.width, bleedBox.height);\n insertedPage.setTrimBox(trimBox.x, trimBox.y, trimBox.width, trimBox.height);\n if (embedPdfBox.sourcePage) {\n copyBasePdfUriLinkAnnotations({\n sourcePage: embedPdfBox.sourcePage,\n targetPage: insertedPage,\n pdfDoc,\n });\n }\n }\n\n return insertedPage;\n};\n","import * as pdfLib from '@pdfme/pdf-lib';\nimport type { GenerateProps, Schema, PDFRenderProps, Template } from '@pdfme/common';\nimport {\n checkGenerateProps,\n applyInternalLinkAnnotations,\n getDynamicTemplate,\n isBlankPdf,\n replacePlaceholders,\n pt2mm,\n cloneDeep,\n mm2pt,\n registerInternalLinkAnchor,\n resetInternalLinkAnnotations,\n} from '@pdfme/common';\nimport { getDynamicLayoutForTable } from '@pdfme/schemas/tables';\nimport { getDynamicLayoutForList } from '@pdfme/schemas/lists';\nimport {\n insertPage,\n preprocessing,\n postProcessing,\n getEmbedPdfPages,\n validateRequiredFields,\n} from './helper.js';\n\ntype SchemaRenderInfo = {\n schemaNames: string[];\n schemaPages: Map<string, Schema>[];\n};\n\nconst hasDynamicLayoutSchema = (schemas: Schema[][]) => {\n for (let i = 0; i < schemas.length; i += 1) {\n const schemaPage = schemas[i];\n for (let j = 0; j < schemaPage.length; j += 1) {\n const schemaType = schemaPage[j].type;\n if (schemaType === 'table' || schemaType === 'list') {\n return true;\n }\n }\n }\n return false;\n};\n\nconst getSchemaRenderInfo = (schemas: Schema[][]): SchemaRenderInfo => {\n const schemaNameSet = new Set<string>();\n const schemaPages: Map<string, Schema>[] = [];\n\n for (let i = 0; i < schemas.length; i += 1) {\n const schemaPage = schemas[i];\n const schemaMap = new Map<string, Schema>();\n\n for (let j = 0; j < schemaPage.length; j += 1) {\n const schema = schemaPage[j];\n if (!schema.name) {\n continue;\n }\n schemaNameSet.add(schema.name);\n if (!schemaMap.has(schema.name)) {\n schemaMap.set(schema.name, schema);\n }\n }\n\n schemaPages.push(schemaMap);\n }\n\n return { schemaNames: Array.from(schemaNameSet), schemaPages };\n};\n\nconst getAdjustedSchema = (\n schema: Schema,\n boundingBoxLeft: number,\n boundingBoxBottom: number,\n): Schema => {\n if (boundingBoxLeft === 0 && boundingBoxBottom === 0) {\n return schema;\n }\n\n return {\n ...schema,\n position: {\n x: schema.position.x + boundingBoxLeft,\n y: schema.position.y - boundingBoxBottom,\n },\n };\n};\n\nconst registerSchemaAnchor = (\n _cache: Map<string | number, unknown>,\n schema: Schema,\n page: pdfLib.PDFPage,\n) => {\n if (!schema.name) return;\n\n registerInternalLinkAnchor({\n _cache,\n name: schema.name,\n page,\n x: mm2pt(schema.position.x),\n y: page.getHeight() - mm2pt(schema.position.y),\n });\n};\n\nconst generate = async (props: GenerateProps): Promise<Uint8Array<ArrayBuffer>> => {\n checkGenerateProps(props);\n const { inputs, template: _template, options = {}, plugins: userPlugins = {} } = props;\n const template = cloneDeep(_template);\n\n const basePdf = template.basePdf;\n const isBlankBasePdf = isBlankPdf(basePdf);\n const staticSchemas = isBlankBasePdf ? (basePdf.staticSchema ?? []) : [];\n const shouldApplyDynamicTemplate = isBlankBasePdf && hasDynamicLayoutSchema(template.schemas);\n\n if (inputs.length === 0) {\n throw new Error(\n '[@pdfme/generator] inputs should not be empty, pass at least an empty object in the array',\n );\n }\n\n validateRequiredFields(template, inputs);\n\n const { pdfDoc, renderObj } = await preprocessing({ template, userPlugins });\n\n const _cache = new Map<string | number, unknown>();\n // Dynamic layout is only applied to blank PDFs, so custom base PDF pages can be embedded once.\n const cachedEmbedPdfPages = isBlankBasePdf\n ? undefined\n : await getEmbedPdfPages({\n template,\n pdfDoc,\n });\n const cachedRenderInfo = shouldApplyDynamicTemplate\n ? undefined\n : getSchemaRenderInfo(template.schemas);\n\n for (let i = 0; i < inputs.length; i += 1) {\n const input = inputs[i];\n resetInternalLinkAnnotations(_cache);\n\n const dynamicTemplate: Template = shouldApplyDynamicTemplate\n ? await getDynamicTemplate({\n template,\n input,\n options,\n _cache,\n getDynamicHeights: (value, args) => {\n switch (args.schema.type) {\n case 'table':\n return getDynamicLayoutForTable(value, args);\n case 'list':\n return getDynamicLayoutForList(value, args);\n default:\n return Promise.resolve([args.schema.height]);\n }\n },\n })\n : template;\n const { basePages, embedPdfBoxes } =\n cachedEmbedPdfPages ??\n (await getEmbedPdfPages({\n template: dynamicTemplate,\n pdfDoc,\n }));\n\n const schemas = dynamicTemplate.schemas;\n const { schemaNames, schemaPages } = shouldApplyDynamicTemplate\n ? getSchemaRenderInfo(schemas)\n : (cachedRenderInfo as SchemaRenderInfo);\n\n for (let j = 0; j < basePages.length; j += 1) {\n const basePage = basePages[j];\n const embedPdfBox = embedPdfBoxes[j];\n\n const boundingBoxLeft =\n basePage instanceof pdfLib.PDFEmbeddedPage ? pt2mm(embedPdfBox.mediaBox.x) : 0;\n const boundingBoxBottom =\n basePage instanceof pdfLib.PDFEmbeddedPage ? pt2mm(embedPdfBox.mediaBox.y) : 0;\n\n const page = insertPage({ basePage, embedPdfBox, pdfDoc });\n const variables = { ...input, totalPages: basePages.length, currentPage: j + 1 };\n\n if (staticSchemas.length > 0) {\n for (let k = 0; k < staticSchemas.length; k += 1) {\n const staticSchema = staticSchemas[k];\n const render = renderObj[staticSchema.type];\n if (!render) {\n continue;\n }\n const value = staticSchema.readOnly\n ? replacePlaceholders({\n content: staticSchema.content || '',\n variables,\n schemas,\n })\n : staticSchema.content || '';\n\n const adjustedStaticSchema = getAdjustedSchema(\n staticSchema,\n boundingBoxLeft,\n boundingBoxBottom,\n );\n registerSchemaAnchor(_cache, adjustedStaticSchema, page);\n\n const staticRenderProps: PDFRenderProps<Schema> = {\n value,\n schema: adjustedStaticSchema,\n basePdf,\n pdfLib,\n pdfDoc,\n page,\n options,\n _cache,\n };\n await render(staticRenderProps);\n }\n }\n\n const schemaPage = schemaPages[j];\n if (!schemaPage) {\n continue;\n }\n\n for (let l = 0; l < schemaNames.length; l += 1) {\n const name = schemaNames[l];\n const schema = schemaPage.get(name);\n if (!schema) {\n continue;\n }\n\n const render = renderObj[schema.type];\n if (!render) {\n continue;\n }\n const value: string = schema.readOnly\n ? replacePlaceholders({\n content: schema.content || '',\n variables,\n schemas,\n })\n : ((input[name] || '') as string);\n\n const adjustedSchema = getAdjustedSchema(schema, boundingBoxLeft, boundingBoxBottom);\n registerSchemaAnchor(_cache, adjustedSchema, page);\n\n const renderProps: PDFRenderProps<Schema> = {\n value,\n schema: adjustedSchema,\n basePdf,\n pdfLib,\n pdfDoc,\n page,\n options,\n _cache,\n };\n await render(renderProps);\n }\n }\n\n applyInternalLinkAnnotations({ _cache, pdfDoc });\n }\n\n postProcessing({ pdfDoc, options });\n\n return pdfDoc.save();\n};\n\nexport default generate;\n","import {\n getDefaultFont,\n getFallbackFontName,\n type Font,\n type PDFRenderProps,\n type Plugin,\n type Schema,\n} from '@pdfme/common';\nimport {\n PDFDict,\n PDFDocument,\n PDFFont,\n PDFName,\n TextAlignment,\n type PDFRadioGroup,\n} from '@pdfme/pdf-lib';\nimport { convertForPdfLayoutProps, hex2PrintingColor } from '@pdfme/schemas/utils';\n\ntype AcroFormSchema = Schema & {\n __acroRequired?: boolean;\n};\n\ntype AcroTextSchema = AcroFormSchema & {\n alignment?: 'left' | 'center' | 'right' | 'justify';\n backgroundColor?: string;\n fontColor?: string;\n fontName?: string;\n fontSize?: number;\n};\n\ntype AcroCheckboxSchema = AcroFormSchema & {\n backgroundColor?: string;\n color?: string;\n};\n\ntype AcroRadioGroupSchema = AcroFormSchema & {\n __acroPageIndex?: number;\n backgroundColor?: string;\n color?: string;\n group?: string;\n};\n\ntype RadioGroupCacheState = {\n optionKeys: Set<string>;\n radioGroup: PDFRadioGroup;\n};\n\nconst DEFAULT_FONT_COLOR = '#000000';\nconst DEFAULT_FONT_SIZE = 13;\nconst DEFAULT_FORM_BORDER_COLOR = '#000000';\nconst FIELD_NAME_COUNTS_CACHE_KEY = 'generateForm:fieldNameCounts';\nconst RADIO_GROUPS_CACHE_KEY = 'generateForm:radioGroups';\n\nconst getNextFieldName = (baseName: string, cache: PDFRenderProps<Schema>['_cache']) => {\n const normalizedBaseName = baseName.trim() || 'field';\n const counts =\n (cache.get(FIELD_NAME_COUNTS_CACHE_KEY) as Map<string, number> | undefined) ??\n new Map<string, number>();\n const count = (counts.get(normalizedBaseName) ?? 0) + 1;\n\n counts.set(normalizedBaseName, count);\n cache.set(FIELD_NAME_COUNTS_CACHE_KEY, counts);\n\n return count === 1 ? normalizedBaseName : `${normalizedBaseName}_${count}`;\n};\n\nconst getFieldName = (schema: Schema, cache: PDFRenderProps<Schema>['_cache']) =>\n getNextFieldName(schema.name, cache);\n\nconst getRadioOptionName = (schema: Schema) => schema.name.trim() || 'option';\n\nconst getRadioGroupName = (schema: AcroRadioGroupSchema) =>\n (schema.group || schema.name).trim() || 'radioGroup';\n\nconst getRadioGroup = (arg: {\n pdfDoc: PDFDocument;\n schema: AcroRadioGroupSchema;\n _cache: PDFRenderProps<Schema>['_cache'];\n}) => {\n const { pdfDoc, schema, _cache } = arg;\n const baseName = getRadioGroupName(schema);\n const optionKey = `${schema.__acroPageIndex ?? 0}:${getRadioOptionName(schema)}`;\n const radioGroups =\n (_cache.get(RADIO_GROUPS_CACHE_KEY) as Map<string, RadioGroupCacheState> | undefined) ??\n new Map<string, RadioGroupCacheState>();\n\n const cached = radioGroups.get(baseName);\n if (cached && !cached.optionKeys.has(optionKey)) {\n cached.optionKeys.add(optionKey);\n return cached.radioGroup;\n }\n\n const radioGroup = pdfDoc.getForm().createRadioGroup(getNextFieldName(baseName, _cache));\n const state = { optionKeys: new Set([optionKey]), radioGroup };\n radioGroups.set(baseName, state);\n _cache.set(RADIO_GROUPS_CACHE_KEY, radioGroups);\n return radioGroup;\n};\n\nconst fetchFontData = async (font: Font, fontName: string) => {\n const fontValue = font[fontName];\n if (!fontValue) {\n throw new Error(`[@pdfme/generator] Font \"${fontName}\" is not configured`);\n }\n\n if (typeof fontValue.data !== 'string' || !fontValue.data.startsWith('http')) {\n return fontValue.data;\n }\n\n const res = await fetch(fontValue.data);\n if (!res.ok) {\n throw new Error(`[@pdfme/generator] Failed to fetch font data from ${fontValue.data}`);\n }\n return res.arrayBuffer();\n};\n\nconst getPdfFont = async (arg: {\n pdfDoc: PDFDocument;\n font: Font;\n fontName: string;\n _cache: PDFRenderProps<Schema>['_cache'];\n}) => {\n const { pdfDoc, font, fontName, _cache } = arg;\n const cacheKey = `generateForm:font:${fontName}`;\n const cached = _cache.get(cacheKey);\n if (cached instanceof PDFFont) {\n return cached;\n }\n\n const pdfFont = await pdfDoc.embedFont(await fetchFontData(font, fontName), {\n subset: font[fontName]?.subset ?? true,\n });\n _cache.set(cacheKey, pdfFont);\n return pdfFont;\n};\n\nconst registerAcroFormFontResource = (pdfDoc: PDFDocument, pdfFont: PDFFont) => {\n const formDict = pdfDoc.getForm().acroForm.dict;\n const context = formDict.context;\n\n const defaultResourcesKey = PDFName.of('DR');\n const fontResourcesKey = PDFName.of('Font');\n let defaultResources = formDict.lookupMaybe(defaultResourcesKey, PDFDict);\n if (!defaultResources) {\n defaultResources = context.obj({});\n formDict.set(defaultResourcesKey, defaultResources);\n }\n\n let fontResources = defaultResources.lookupMaybe(fontResourcesKey, PDFDict);\n if (!fontResources) {\n fontResources = context.obj({});\n defaultResources.set(fontResourcesKey, fontResources);\n }\n\n fontResources.set(PDFName.of(pdfFont.name), pdfFont.ref);\n};\n\nconst getTextAlignment = (alignment: AcroTextSchema['alignment']) => {\n switch (alignment) {\n case 'center':\n return TextAlignment.Center;\n case 'right':\n return TextAlignment.Right;\n default:\n return TextAlignment.Left;\n }\n};\n\nconst renderAcroText = async (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const textSchema = schema as AcroTextSchema;\n const font = options.font ?? getDefaultFont();\n const fontName =\n textSchema.fontName && font[textSchema.fontName]\n ? textSchema.fontName\n : getFallbackFontName(font);\n const pdfFont = await getPdfFont({ pdfDoc, font, fontName, _cache });\n registerAcroFormFontResource(pdfDoc, pdfFont);\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const textField = pdfDoc.getForm().createTextField(getFieldName(schema, _cache));\n\n textField.setText(value || undefined);\n textField.setAlignment(getTextAlignment(textSchema.alignment));\n textField.enableMultiline();\n if (textSchema.__acroRequired) textField.enableRequired();\n\n textField.addToPage(page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n font: pdfFont,\n textColor: hex2PrintingColor(textSchema.fontColor || DEFAULT_FONT_COLOR, options.colorType),\n backgroundColor: textSchema.backgroundColor\n ? hex2PrintingColor(textSchema.backgroundColor, options.colorType)\n : undefined,\n borderWidth: 0,\n });\n textField.setFontSize(textSchema.fontSize ?? DEFAULT_FONT_SIZE);\n textField.updateAppearances(pdfFont);\n};\n\nconst renderAcroCheckbox = (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const checkboxSchema = schema as AcroCheckboxSchema;\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const checkBox = pdfDoc.getForm().createCheckBox(getFieldName(schema, _cache));\n if (value === 'true') checkBox.check();\n if (checkboxSchema.__acroRequired) checkBox.enableRequired();\n\n const color = checkboxSchema.color || DEFAULT_FORM_BORDER_COLOR;\n checkBox.addToPage(page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n textColor: hex2PrintingColor(color, options.colorType),\n backgroundColor: checkboxSchema.backgroundColor\n ? hex2PrintingColor(checkboxSchema.backgroundColor, options.colorType)\n : undefined,\n borderColor: hex2PrintingColor(color, options.colorType),\n borderWidth: 1,\n });\n checkBox.updateAppearances();\n};\n\nconst renderAcroRadioGroup = (arg: PDFRenderProps<Schema>) => {\n const { value, pdfDoc, page, options, schema, _cache } = arg;\n const radioGroupSchema = schema as AcroRadioGroupSchema;\n const { position, width, height, rotate } = convertForPdfLayoutProps({\n schema,\n pageHeight: page.getHeight(),\n });\n\n const radioGroup = getRadioGroup({ pdfDoc, schema: radioGroupSchema, _cache });\n const color = radioGroupSchema.color || DEFAULT_FORM_BORDER_COLOR;\n const optionName = getRadioOptionName(schema);\n\n if (radioGroupSchema.__acroRequired) radioGroup.enableRequired();\n\n radioGroup.addOptionToPage(optionName, page, {\n x: position.x,\n y: position.y,\n width,\n height,\n rotate,\n textColor: hex2PrintingColor(color, options.colorType),\n backgroundColor: radioGroupSchema.backgroundColor\n ? hex2PrintingColor(radioGroupSchema.backgroundColor, options.colorType)\n : undefined,\n borderColor: hex2PrintingColor(color, options.colorType),\n borderWidth: 1,\n });\n\n if (value === 'true') radioGroup.select(optionName);\n radioGroup.updateAppearances();\n};\n\nexport const acroTextPlugin: Plugin = {\n pdf: renderAcroText,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroText',\n position: { x: 0, y: 0 },\n width: 10,\n height: 10,\n },\n },\n};\n\nexport const acroRadioGroupPlugin: Plugin = {\n pdf: renderAcroRadioGroup,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroRadioGroup',\n position: { x: 0, y: 0 },\n width: 8,\n height: 8,\n },\n },\n};\n\nexport const acroCheckboxPlugin: Plugin = {\n pdf: renderAcroCheckbox,\n ui: () => {},\n propPanel: {\n schema: {},\n defaultSchema: {\n name: '',\n type: 'acroCheckbox',\n position: { x: 0, y: 0 },\n width: 8,\n height: 8,\n },\n },\n};\n","import type { GenerateProps, Plugins, Schema, Template } from '@pdfme/common';\nimport { cloneDeep } from '@pdfme/common';\nimport { checkbox, radioGroup, text } from '@pdfme/schemas';\nimport { acroCheckboxPlugin, acroRadioGroupPlugin, acroTextPlugin } from './acroForm.js';\nimport generate from './generate.js';\n\nexport type GenerateFormProps = Omit<GenerateProps, 'inputs'> & {\n inputs?: GenerateProps['inputs'];\n};\n\nconst ACRO_TEXT_TYPE = 'acroText';\nconst ACRO_CHECKBOX_TYPE = 'acroCheckbox';\nconst ACRO_RADIO_GROUP_TYPE = 'acroRadioGroup';\nconst TEXT_TYPE = 'text';\nconst CHECKBOX_TYPE = 'checkbox';\nconst RADIO_GROUP_TYPE = 'radioGroup';\n\nconst hasPluginForType = (plugins: Plugins, type: string) =>\n Object.values(plugins).some((plugin) => plugin.propPanel.defaultSchema.type === type);\n\nconst withAcroFormPlugins = (plugins: Plugins = {}) => {\n const mergedPlugins = { ...plugins };\n\n if (!hasPluginForType(mergedPlugins, TEXT_TYPE)) {\n mergedPlugins.Text = text;\n }\n\n if (!hasPluginForType(mergedPlugins, CHECKBOX_TYPE)) {\n mergedPlugins.Checkbox = checkbox;\n }\n\n if (!hasPluginForType(mergedPlugins, RADIO_GROUP_TYPE)) {\n mergedPlugins.RadioGroup = radioGroup;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_TEXT_TYPE)) {\n mergedPlugins.AcroText = acroTextPlugin;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_CHECKBOX_TYPE)) {\n mergedPlugins.AcroCheckbox = acroCheckboxPlugin;\n }\n\n if (!hasPluginForType(mergedPlugins, ACRO_RADIO_GROUP_TYPE)) {\n mergedPlugins.AcroRadioGroup = acroRadioGroupPlugin;\n }\n\n return mergedPlugins;\n};\n\nconst toAcroFormSchema = (schema: Schema, pageIndex: number): Schema => {\n if (schema.readOnly) {\n return schema;\n }\n\n const formSchema = schema.required ? { ...schema, required: false } : schema;\n\n if (schema.type === TEXT_TYPE) {\n return { ...formSchema, type: ACRO_TEXT_TYPE, __acroRequired: schema.required };\n }\n if (schema.type === CHECKBOX_TYPE) {\n return { ...formSchema, type: ACRO_CHECKBOX_TYPE, __acroRequired: schema.required };\n }\n if (schema.type === RADIO_GROUP_TYPE) {\n return {\n ...formSchema,\n type: ACRO_RADIO_GROUP_TYPE,\n __acroPageIndex: pageIndex,\n __acroRequired: schema.required,\n };\n }\n\n return formSchema;\n};\n\nconst getAcroFormTemplate = (template: Template): Template => {\n const clonedTemplate = cloneDeep(template);\n clonedTemplate.schemas = clonedTemplate.schemas.map((page, pageIndex) =>\n page.map((schema) => toAcroFormSchema(schema, pageIndex)),\n );\n return clonedTemplate;\n};\n\nconst normalizeInputs = (inputs?: GenerateProps['inputs']) =>\n inputs && inputs.length > 0 ? inputs : [{}];\n\nconst generateForm = async (props: GenerateFormProps): Promise<Uint8Array<ArrayBuffer>> => {\n return generate({\n ...props,\n inputs: normalizeInputs(props.inputs),\n template: getAcroFormTemplate(props.template),\n plugins: withAcroFormPlugins(props.plugins),\n });\n};\n\nexport default generateForm;\n"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED