/** * PDF格式生成器 * 将分析结果转换为PDF文档 * 使用html-pdf库进行转换 */ const generatePDF = async (analysisData, analysisType, userName) => { try { // 生成HTML内容 const htmlContent = generateHTML(analysisData, analysisType, userName); // 由于html-pdf库需要额外安装,这里先返回HTML转PDF的占位符 // 在实际部署时需要安装 html-pdf 或 puppeteer // 临时解决方案:返回HTML内容作为PDF(实际应该转换为PDF) const Buffer = require('buffer').Buffer; return Buffer.from(htmlContent, 'utf8'); // 正式实现应该是: // const pdf = require('html-pdf'); // return new Promise((resolve, reject) => { // pdf.create(htmlContent, { // format: 'A4', // border: { // top: '0.5in', // right: '0.5in', // bottom: '0.5in', // left: '0.5in' // } // }).toBuffer((err, buffer) => { // if (err) reject(err); // else resolve(buffer); // }); // }); } catch (error) { console.error('生成PDF失败:', error); throw error; } }; /** * 生成HTML内容 */ const generateHTML = (analysisData, analysisType, userName) => { const timestamp = new Date().toLocaleString('zh-CN'); let html = `
专业命理分析平台
姓名:${userName || '用户'}
生成时间:${timestamp}
| 柱位 | 天干 | 地支 | 纳音 |
|---|---|---|---|
| 年柱 | ${bazi.year?.split('')[0] || '-'} | ${bazi.year?.split('')[1] || '-'} | ${bazi.year_nayin || '-'} |
| 月柱 | ${bazi.month?.split('')[0] || '-'} | ${bazi.month?.split('')[1] || '-'} | ${bazi.month_nayin || '-'} |
| 日柱 | ${bazi.day?.split('')[0] || '-'} | ${bazi.day?.split('')[1] || '-'} | ${bazi.day_nayin || '-'} |
| 时柱 | ${bazi.hour?.split('')[0] || '-'} | ${bazi.hour?.split('')[1] || '-'} | ${bazi.hour_nayin || '-'} |
| 五行 | 数量 | 占比 | 强度 |
|---|---|---|---|
| ${element} | ${numCount} | ${percentage}% | ${strength} |
${analysisData.wuxing_analysis.balance_analysis}
${analysisData.wuxing_analysis.suggestions}
${analysisData.pattern_analysis.analysis}
${analysisData.life_guidance.strengths}
`; } html += `${analysisData.life_guidance.challenges}
`; } html += `${analysisData.life_guidance.overall_summary}
亮度:${star.brightness}
`; } if (star.influence) { html += `影响:${star.influence}
`; } if (star.description) { html += `特质:${star.description}
`; } html += `${analysisData.star_analysis.main_stars}
`; } html += `