diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/forms/services.ts | 10 | ||||
| -rw-r--r-- | lib/pdftron/serverSDK/createReport.ts | 83 | ||||
| -rw-r--r-- | lib/po/service.ts | 4 |
3 files changed, 95 insertions, 2 deletions
diff --git a/lib/forms/services.ts b/lib/forms/services.ts index ff21626c..a1bbf003 100644 --- a/lib/forms/services.ts +++ b/lib/forms/services.ts @@ -1,6 +1,7 @@ // lib/forms/services.ts "use server"; +import { headers } from "next/headers"; import path from "path"; import fs from "fs/promises"; import { v4 as uuidv4 } from "uuid"; @@ -805,3 +806,12 @@ export async function uploadReportTemp( }); } } + +export const getOrigin = async ():Promise<string> => { + const headersList = await headers(); + const host = headersList.get("host"); + const proto = headersList.get("x-forwarded-proto") || "http"; // 기본값은 http + const origin = `${proto}://${host}`; + + return origin; +}; diff --git a/lib/pdftron/serverSDK/createReport.ts b/lib/pdftron/serverSDK/createReport.ts new file mode 100644 index 00000000..412ada87 --- /dev/null +++ b/lib/pdftron/serverSDK/createReport.ts @@ -0,0 +1,83 @@ +const { PDFNet } = require("@pdftron/pdfnet-node"); + +type CreateReport = ( + coverPage: Buffer, + reportTempPath: string, + reportDatas: { + [key: string]: any; + }[] +) => Promise<{ + result: boolean; + buffer?: ArrayBuffer; + error?: any; +}>; + +export const createReport: CreateReport = async ( + coverPage, + reportTempPath, + reportDatas +) => { + const main = async () => { + await PDFNet.initialize(process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY); + + const mainDoc = await PDFNet.PDFDoc.create(); + const buf = await PDFNet.Convert.office2PDFBuffer(coverPage); + const coverPDFDoc = await PDFNet.PDFDoc.createFromBuffer(buf); + + const options = new PDFNet.Convert.OfficeToPDFOptions(); + + await mainDoc.insertPages( + (await mainDoc.getPageCount()) + 1, + coverPDFDoc, + 1, + await coverPDFDoc.getPageCount(), + PDFNet.PDFDoc.InsertFlag.e_none + ); + + for (const reportData of reportDatas) { + const resportDataJson = JSON.stringify(reportData); + + const templateDoc = await PDFNet.Convert.createOfficeTemplateWithPath( + "public" + reportTempPath, + options + ); + + const pdfdoc = await templateDoc.fillTemplateJson(resportDataJson); + + await mainDoc.insertPages( + (await mainDoc.getPageCount()) + 1, + pdfdoc, + 1, + await pdfdoc.getPageCount(), + PDFNet.PDFDoc.InsertFlag.e_none + ); + } + + // await mainDoc.save("test1.pdf", PDFNet.SDFDoc.SaveOptions.e_linearized); + + const buffer = await mainDoc.saveMemoryBuffer( + PDFNet.SDFDoc.SaveOptions.e_linearized + ); + + return { + result: true, + buffer, + }; + }; + + const result = await PDFNet.runWithCleanup( + main, + process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY + ) + .catch((err: any) => { + return { + result: false, + error: err, + }; + }) + .then(async (data: any) => { + return data; + }); + + return result; +}; diff --git a/lib/po/service.ts b/lib/po/service.ts index f697bd58..5f2e4f35 100644 --- a/lib/po/service.ts +++ b/lib/po/service.ts @@ -324,7 +324,6 @@ Remarks:${contract.remarks}`, const { success: sendDocuSignResult, envelopeId } = sendDocuSign; - await tx .update(contracts) .set({ @@ -344,7 +343,8 @@ Remarks:${contract.remarks}`, const fileName = `${contractNo}-signature.pdf`; const ext = path.extname(fileName); const uniqueName = uuidv4() + ext; - // Create a single envelope for all signers + + // Create a single envelope for all signers const [newEnvelope] = await tx .insert(contractEnvelopes) .values({ |
