diff options
Diffstat (limited to 'lib/pdftron/serverSDK/createBasicContractPdf.ts')
| -rw-r--r-- | lib/pdftron/serverSDK/createBasicContractPdf.ts | 137 |
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; +}; |
