SuiteScript 2.1使用N/render模块基于模板生成PDF报错如何解决
问题根因
报错的核心原因是renderer.templateContent属性仅接受XML格式的字符串值,你在代码中直接将file.load()返回的File对象赋值给了该属性,NetSuite底层在做Java类型转换时无法将File对象转为字符串,因此触发了该错误。
修复方案
修改代码读取模板文件的内容字符串后再赋值给templateContent,修复后的代码如下:
function generatePdfFileFromRawXml(jsonObj) { // 加载XML模板文件 const templateFile = file.load({ id: './QuotesMonthPDF.template.xml', }); const renderer = render.create(); // 调用getContents()获取文件的字符串内容,再赋值给templateContent renderer.templateContent = templateFile.getContents(); renderer.addCustomDataSource({ format: render.DataSource.OBJECT, alias: 'JSON', data: jsonObj, }); // 后续调用renderer.renderAsPdf()即可拿到生成后的PDF File对象,用于邮件发送 }
后续验证要点
- 路径校验:相对路径
./QuotesMonthPDF.template.xml仅在模板文件与当前Map/Reduce脚本存放在File Cabinet的同一文件夹下时生效,若文件加载失败可替换为绝对路径(如/SuiteScripts/xxx/QuotesMonthPDF.template.xml)确认 - 模板语法校验:后续添加数据填充字段时,使用
${JSON.你的字段名}格式即可和你设置的alias: 'JSON'对应,符合FreeMarker语法规范 - 渲染验证:你当前已配置了多语言字体规则,生成包含中、日、韩等语言的PDF时不会出现字体缺失乱码问题
内容的提问来源于stack exchange,提问作者Gregorio Llabra
相关产品推荐
相关产品推荐

