diff --git a/apps/web/pages/api/documents/[id]/fields/index.ts b/apps/web/pages/api/documents/[id]/fields/index.ts index 93cd7a4ce..0e5b01f03 100644 --- a/apps/web/pages/api/documents/[id]/fields/index.ts +++ b/apps/web/pages/api/documents/[id]/fields/index.ts @@ -46,6 +46,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) { positionX: number; positionY: number; Recipient: { id: number }; + customText: string; } = req.body; if (!user) return; @@ -69,6 +70,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) { update: { positionX: +body.positionX, positionY: +body.positionY, + customText: body.customText, }, create: { documentId: +documentId, @@ -76,6 +78,7 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) { page: +body.page, positionX: +body.positionX, positionY: +body.positionY, + customText: body.customText, // todo refactor only one type of recipientId recipientId: body.Recipient.id, }, diff --git a/apps/web/pages/api/documents/[id]/sign.ts b/apps/web/pages/api/documents/[id]/sign.ts index 76d2eeedb..b499e9d72 100644 --- a/apps/web/pages/api/documents/[id]/sign.ts +++ b/apps/web/pages/api/documents/[id]/sign.ts @@ -71,20 +71,24 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) { }, }); - const dateFields = await prisma.field.findMany({ + const nonSignatureFields = await prisma.field.findMany({ where: { documentId: document.id, - type: FieldType.DATE, + type: { in: [FieldType.DATE, FieldType.TEXT] }, }, }); - for (const dateField of dateFields) { + // Insert fields other than signatures + for (const field of nonSignatureFields) { documentWithInserts = await insertTextInPDF( documentWithInserts, - new Date().toDateString(), - dateField.positionX, - dateField.positionY, - dateField.page + field.type === FieldType.DATE + ? new Date().toDateString() + : field.customText || "", + field.positionX, + field.positionY, + field.page, + false ); } diff --git a/packages/features/editor/createField.ts b/packages/features/editor/createField.ts index 3bb8a951d..5f9158a85 100644 --- a/packages/features/editor/createField.ts +++ b/packages/features/editor/createField.ts @@ -1,11 +1,12 @@ import { FieldType } from "@prisma/client"; -export const createField = function addField( +export const createField = ( e: any, page: number, selectedRecipient: any, - type: FieldType = FieldType.SIGNATURE -): any { + type: FieldType = FieldType.SIGNATURE, + customText = "" +): any => { var rect = e.target.getBoundingClientRect(); const fieldSize = { width: 192, height: 96 }; var newFieldX = e.clientX - rect.left - fieldSize.width / 2; //x position within the element. @@ -25,6 +26,7 @@ export const createField = function addField( positionX: newFieldX.toFixed(0), positionY: newFieldY.toFixed(0), Recipient: selectedRecipient, + customText: customText, }; return signatureField; diff --git a/packages/pdf/insertTextInPDF.ts b/packages/pdf/insertTextInPDF.ts index 184f8b963..bf6ec4f36 100644 --- a/packages/pdf/insertTextInPDF.ts +++ b/packages/pdf/insertTextInPDF.ts @@ -7,7 +7,8 @@ export async function insertTextInPDF( text: string, positionX: number, positionY: number, - page: number = 0 + page: number = 0, + useHandwritingFont = true ): Promise { const fontBytes = fs.readFileSync("public/fonts/Qwigley-Regular.ttf"); @@ -16,10 +17,11 @@ export async function insertTextInPDF( const pdfDoc = await PDFDocument.load(existingPdfBytes); pdfDoc.registerFontkit(fontkit); const customFont = await pdfDoc.embedFont(fontBytes); + const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica); const pages = pdfDoc.getPages(); const pdfPage = pages[page]; - const textSize = 50; + const textSize = useHandwritingFont ? 50 : 15; const textWidth = customFont.widthOfTextAtSize(text, textSize); const textHeight = customFont.heightAtSize(textSize); @@ -27,7 +29,7 @@ export async function insertTextInPDF( x: positionX, // todo adjust for exact field size y: pdfPage.getHeight() - positionY - textHeight / 2, // todo adjust for exact field size size: textSize, - font: customFont, + font: useHandwritingFont ? customFont : helveticaFont, color: rgb(0, 0, 0), }); diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 085319584..7ff9f170c 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -115,6 +115,7 @@ model Field { page Int positionX Int @default(0) positionY Int @default(0) + customText String Document Document @relation(fields: [documentId], references: [id], onDelete: Cascade) Recipient Recipient? @relation(fields: [recipientId], references: [id], onDelete: Cascade) Signature Signature?