mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 00:03:33 +10:00
♻️ 🚧 date and text field
This commit is contained in:
@ -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,
|
||||
},
|
||||
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -7,7 +7,8 @@ export async function insertTextInPDF(
|
||||
text: string,
|
||||
positionX: number,
|
||||
positionY: number,
|
||||
page: number = 0
|
||||
page: number = 0,
|
||||
useHandwritingFont = true
|
||||
): Promise<string> {
|
||||
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),
|
||||
});
|
||||
|
||||
|
||||
@ -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?
|
||||
|
||||
Reference in New Issue
Block a user