能否复用pdfmake创建PDF的对象生成Excel文件?
复用pdfmake配置对象生成Excel的可行性及实现思路
可行,但需要对pdfmake的配置对象做数据提取与结构映射——毕竟pdfmake的结构是为PDF排版设计的,和Excel的行列式数据结构逻辑不同,直接复用原对象生成Excel不现实,但可以基于它提取核心数据再生成Excel。
以下是具体技术思路:
第一步:从pdfmake配置中提取核心数据
遍历pdfmake的dd.content结构,把排版用的文本标签和对应的数据拆解出来。比如你提供的示例里,"Address"和Customer2.address是一组键值对,"Responsibility"和Customer2.resp_org_name是另一组,我们可以写简单的遍历逻辑提取:// 提取结构化数据的示例代码 const extractExcelData = (pdfContent) => { const dataMap = {}; // 假设内容是标签+数据成对出现的结构 const bodyItems = pdfContent[0].body; for (let i = 0; i < bodyItems.length; i += 2) { const label = bodyItems[i].text; const value = bodyItems[i + 1].text; dataMap[label] = value; } return dataMap; }; const coreData = extractExcelData(dd.content);如果你的pdfmake配置有更复杂的结构(比如嵌套表格、列表),需要递归遍历
content里的元素,区分文本、表格块等类型,针对性提取数据。第二步:选择前端Excel生成库
用纯前端库就能完成Excel生成,比如SheetJS(xlsx),它支持把JSON、数组等结构化数据直接转成Excel文件,不需要依赖后端服务。第三步:将提取的数据映射为Excel结构并生成文件
把第一步提取的结构化数据转成Excel需要的行列格式,再用SheetJS生成文件:// 用SheetJS生成Excel的示例代码 import XLSX from 'xlsx'; // 转成Excel工作表需要的二维数组:第一行是标题,第二行是数据 const worksheetData = [ Object.keys(coreData), Object.values(coreData) ]; // 创建工作表和工作簿 const worksheet = XLSX.utils.aoa_to_sheet(worksheetData); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '客户信息'); // 导出Excel文件 XLSX.writeFile(workbook, '客户信息表.xlsx');可选:样式适配
如果需要保留原PDF里的部分样式(比如文本颜色),可以使用SheetJS的扩展库xlsx-style,给对应单元格设置字体颜色、对齐方式等样式,不过这部分属于进阶需求,基础生成可以忽略。
内容的提问来源于stack exchange,提问作者Pooja Thapa
相关产品推荐
相关产品推荐

