feat: add checkbox field

This commit is contained in:
Ephraim Atta-Duncan
2024-04-09 21:17:30 +00:00
parent 6285ef2cc0
commit 0f0f198b44
11 changed files with 271 additions and 16 deletions

View File

@ -188,10 +188,17 @@ export const signFieldWithToken = async ({
type,
data: signatureImageAsBase64 || typedSignature || '',
}))
.with(FieldType.DATE, FieldType.EMAIL, FieldType.NAME, FieldType.TEXT, (type) => ({
type,
data: updatedField.customText,
}))
.with(
FieldType.DATE,
FieldType.EMAIL,
FieldType.NAME,
FieldType.TEXT,
FieldType.CHECKBOX,
(type) => ({
type,
data: updatedField.customText,
}),
)
.exhaustive(),
fieldSecurity: derivedRecipientActionAuth
? {

View File

@ -1,6 +1,7 @@
// https://github.com/Hopding/pdf-lib/issues/20#issuecomment-412852821
import fontkit from '@pdf-lib/fontkit';
import { PDFDocument, StandardFonts } from 'pdf-lib';
import type { PDFDocument } from 'pdf-lib';
import { StandardFonts } from 'pdf-lib';
import {
DEFAULT_HANDWRITING_FONT_SIZE,
@ -18,6 +19,7 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
);
const isSignatureField = isSignatureFieldType(field.type);
const isCheckboxField = field.type === FieldType.CHECKBOX;
pdf.registerFontkit(fontkit);
@ -73,6 +75,28 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
width: imageWidth,
height: imageHeight,
});
} else if (isCheckboxField) {
const form = pdf.getForm();
const checkBox = form.createCheckBox(`checkBox.field.${field.id}`);
const textX = fieldX + fieldWidth / 2;
let textY = fieldY + fieldHeight / 2;
textY = pageHeight - textY;
checkBox.addToPage(page, {
x: textX,
y: textY,
width: 16,
height: 16,
borderWidth: 1,
});
if (field.customText === '✓') {
checkBox.check();
}
form.getField(`checkBox.field.${field.id}`).enableReadOnly();
} else {
const longestLineInTextForWidth = field.customText
.split('\n')
@ -102,14 +126,3 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
return pdf;
};
export const insertFieldInPDFBytes = async (
pdf: ArrayBuffer | Uint8Array | string,
field: FieldWithSignature,
) => {
const pdfDoc = await PDFDocument.load(pdf);
await insertFieldInPDF(pdfDoc, field);
return await pdfDoc.save();
};

View File

@ -231,6 +231,10 @@ export const ZDocumentAuditLogEventDocumentFieldInsertedSchema = z.object({
type: z.literal(FieldType.TEXT),
data: z.string(),
}),
z.object({
type: z.literal(FieldType.CHECKBOX),
data: z.string(),
}),
z.object({
type: z.union([z.literal(FieldType.SIGNATURE), z.literal(FieldType.FREE_SIGNATURE)]),
data: z.string(),