diff options
Diffstat (limited to 'pages/api/pdftron/createVendorDataReports.ts')
| -rw-r--r-- | pages/api/pdftron/createVendorDataReports.ts | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/pages/api/pdftron/createVendorDataReports.ts b/pages/api/pdftron/createVendorDataReports.ts new file mode 100644 index 00000000..e6c8b8ee --- /dev/null +++ b/pages/api/pdftron/createVendorDataReports.ts @@ -0,0 +1,81 @@ +import type { NextApiRequest, NextApiResponse } from "next"; +import type { File as FormidableFile } from "formidable"; +import formidable from "formidable"; +import fs from "fs/promises"; +import { createReport } from "@/lib/pdftron/serverSDK/createReport"; + +export const config = { + api: { + bodyParser: false, // ✅ 이게 false면 안 됨! + }, +}; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== "POST") { + return res.status(405).end(); + } + + try { + const form = formidable({ multiples: false }); + + form.parse(req, async (err, fields, files) => { + if (err) { + console.error(err); + return res.status(500).json({ error: "Error parsing form" }); + } + + try { + const fileName = fields?.customFileName?.[0] ?? ""; + const reportDatas = JSON.parse(fields?.reportDatas?.[0] ?? "[]") as { + [key: string]: any; + }[]; + const reportTempPath = fields?.reportTempPath?.[0] ?? ""; + const reportCoverPage: FormidableFile | undefined = files?.file?.[0]; + + if ( + !reportCoverPage || + fileName.length === 0 || + reportDatas.length === 0 || + reportTempPath.length === 0 + ) { + return res.status(400).json({ error: "Invalid Report Data" }); + } + + const buffer = await fs.readFile(reportCoverPage.filepath); + + const { + result, + buffer: pdfBuffer, + error, + } = await createReport(buffer, reportTempPath, reportDatas); + + if (result && pdfBuffer) { + res.setHeader("Content-Type", "application/pdf"); + res.setHeader( + "Content-Disposition", + `attachment; filename="${fileName}"` + ); + + // ✅ 중요! PDFNet에서 나온 pdfBuffer(Uint8Array)를 Node Buffer로 감싸기 + return res.send(Buffer.from(pdfBuffer)); + } + + return res + .status(200) + .json({ + success: false, + message: "Report 생성에 실패하였습니다.", + error, + }); + } catch (e) { + console.log(e); + return res.status(400).json({ error: "Invalid additionalData" }); + } + }); + } catch (err) { + return res.status(401).end(); + } +} |
