1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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;
};
|