summaryrefslogtreecommitdiff
path: root/lib/pdftron/serverSDK
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pdftron/serverSDK')
-rw-r--r--lib/pdftron/serverSDK/createBasicContractPdf.ts137
1 files changed, 137 insertions, 0 deletions
diff --git a/lib/pdftron/serverSDK/createBasicContractPdf.ts b/lib/pdftron/serverSDK/createBasicContractPdf.ts
new file mode 100644
index 00000000..a2e0b350
--- /dev/null
+++ b/lib/pdftron/serverSDK/createBasicContractPdf.ts
@@ -0,0 +1,137 @@
+const { PDFNet } = require("@pdftron/pdfnet-node");
+
+type CreateBasicContractPdf = (
+ templateBuffer: Buffer,
+ templateData: {
+ [key: string]: any;
+ }
+) => Promise<{
+ result: boolean;
+ buffer?: ArrayBuffer;
+ error?: any;
+}>;
+
+export const createBasicContractPdf: CreateBasicContractPdf = async (
+ templateBuffer,
+ templateData
+) => {
+ const main = async () => {
+ await PDFNet.initialize(process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY);
+
+ console.log("πŸ”„ PDFTron κΈ°λ³Έκ³„μ•½μ„œ PDF λ³€ν™˜ μ‹œμž‘");
+ console.log("πŸ“ ν…œν”Œλ¦Ώ 데이터:", JSON.stringify(templateData, null, 2));
+
+ // ν…œν”Œλ¦Ώ 데이터가 μžˆλŠ” 경우 λ³€μˆ˜ μΉ˜ν™˜ ν›„ PDF λ³€ν™˜
+ if (Object.keys(templateData).length > 0) {
+ console.log("πŸ”„ ν…œν”Œλ¦Ώ λ³€μˆ˜ μΉ˜ν™˜ μ‹œμž‘");
+
+ try {
+ // createReport.ts λ°©μ‹μ²˜λŸΌ ν…œν”Œλ¦Ώ λ³€μˆ˜ μΉ˜ν™˜ (UTF-8 인코딩 지원)
+ const options = new PDFNet.Convert.OfficeToPDFOptions();
+
+ // UTF-8 인코딩 λͺ…μ‹œ μ„€μ • μ‹œλ„
+ try {
+ options.setCharset("UTF-8");
+ console.log("βœ… UTF-8 인코딩 μ„€μ • μ™„λ£Œ");
+ } catch (charsetError) {
+ console.warn("⚠️ UTF-8 인코딩 μ„€μ • μ‹€νŒ¨, κΈ°λ³Έ μ„€μ • μ‚¬μš©:", charsetError);
+ }
+
+ // ν…œν”Œλ¦Ώ 데이터λ₯Ό UTF-8둜 λͺ…μ‹œμ μœΌλ‘œ 인코딩
+ const templateDataJson = JSON.stringify(templateData, null, 2);
+ const utf8TemplateData = Buffer.from(templateDataJson, 'utf8').toString('utf8');
+ console.log("πŸ“ UTF-8 μΈμ½”λ”©λœ ν…œν”Œλ¦Ώ 데이터:", utf8TemplateData);
+
+ const tempPath = `/tmp/temp_template_${Date.now()}.docx`;
+
+ // νŒŒμΌλ„ UTF-8둜 μ €μž₯ (λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λŠ” κ·ΈλŒ€λ‘œ μœ μ§€)
+ require('fs').writeFileSync(tempPath, templateBuffer, { encoding: null }); // λ°”μ΄λ„ˆλ¦¬λ‘œ μ €μž₯
+
+ // Office ν…œν”Œλ¦Ώ 생성 및 λ³€μˆ˜ μΉ˜ν™˜
+ const templateDoc = await PDFNet.Convert.createOfficeTemplateWithPath(
+ tempPath,
+ options
+ );
+
+ const filledDoc = await templateDoc.fillTemplateJson(utf8TemplateData);
+
+ // μž„μ‹œ 파일 μ‚­μ œ
+ require('fs').unlinkSync(tempPath);
+
+ console.log("βœ… ν…œν”Œλ¦Ώ λ³€μˆ˜ μΉ˜ν™˜ 및 PDF λ³€ν™˜ μ™„λ£Œ");
+
+ const buffer = await filledDoc.saveMemoryBuffer(
+ PDFNet.SDFDoc.SaveOptions.e_linearized
+ );
+
+ return {
+ result: true,
+ buffer,
+ };
+
+ } catch (templateError) {
+ console.warn("⚠️ ν…œν”Œλ¦Ώ λ³€μˆ˜ μΉ˜ν™˜ μ‹€νŒ¨, κΈ°λ³Έ λ³€ν™˜ μˆ˜ν–‰:", templateError);
+
+ // ν…œν”Œλ¦Ώ 처리 μ‹€νŒ¨ μ‹œ κΈ°λ³Έ PDF λ³€ν™˜λ§Œ μˆ˜ν–‰ (UTF-8 인코딩 적용)
+ const fallbackOptions = new PDFNet.Convert.OfficeToPDFOptions();
+ try {
+ fallbackOptions.setCharset("UTF-8");
+ } catch (charsetError) {
+ console.warn("⚠️ 폴백 UTF-8 인코딩 μ„€μ • μ‹€νŒ¨:", charsetError);
+ }
+
+ const buf = await PDFNet.Convert.office2PDFBuffer(templateBuffer, fallbackOptions);
+ const templateDoc = await PDFNet.PDFDoc.createFromBuffer(buf);
+
+ const buffer = await templateDoc.saveMemoryBuffer(
+ PDFNet.SDFDoc.SaveOptions.e_linearized
+ );
+
+ return {
+ result: true,
+ buffer,
+ };
+ }
+ } else {
+ // ν…œν”Œλ¦Ώ 데이터가 μ—†λŠ” 경우 λ‹¨μˆœ λ³€ν™˜ (UTF-8 인코딩 적용)
+ console.log("πŸ“„ λ‹¨μˆœ PDF λ³€ν™˜ μˆ˜ν–‰ (UTF-8 인코딩)");
+
+ const simpleOptions = new PDFNet.Convert.OfficeToPDFOptions();
+ try {
+ simpleOptions.setCharset("UTF-8");
+ console.log("βœ… λ‹¨μˆœ λ³€ν™˜ UTF-8 인코딩 μ„€μ • μ™„λ£Œ");
+ } catch (charsetError) {
+ console.warn("⚠️ λ‹¨μˆœ λ³€ν™˜ UTF-8 인코딩 μ„€μ • μ‹€νŒ¨:", charsetError);
+ }
+
+ const buf = await PDFNet.Convert.office2PDFBuffer(templateBuffer, simpleOptions);
+ const templateDoc = await PDFNet.PDFDoc.createFromBuffer(buf);
+
+ const buffer = await templateDoc.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) => {
+ console.error("❌ PDFTron κΈ°λ³Έκ³„μ•½μ„œ PDF λ³€ν™˜ 였λ₯˜:", err);
+ return {
+ result: false,
+ error: err,
+ };
+ })
+ .then(async (data: any) => {
+ return data;
+ });
+
+ return result;
+};