SuiteScript 2.0使用xmlToPdf添加文件柜图片至PDF报错求助
问题解决:NetSuite脚本生成PDF时图片加载的XML解析错误
错误原因
错误提示"Error Parsing XML: The reference to entity "c" must end with the ';' delimiter",本质是文件柜图片的URL包含未转义的&字符(比如URL参数中的&c=xxx)。XML解析器会将&识别为实体引用的起始符号,要求必须以;结尾,未转义的&直接破坏了XML语法规则,导致解析失败。
解决方案
方案一:转义URL中的XML特殊字符
手动将URL里的&替换为XML合法的转义字符&,确保XML解析器能正确识别:
var myImageFromFileCabinet = file.load({id:10202}); let imgURL = myImageFromFileCabinet.url; // 全局替换URL中的&为XML转义字符 let escapedImgURL = imgURL.replace(/&/g, '&'); xmlStr = `<body><img src="https://system.na2.netsuite.com${escapedImgURL}"></body>`; let pdfFile = render.xmlToPdf({ xmlString: xmlStr }); context.response.writeFile({ file: pdfFile, isInline: true });
方案二:使用NetSuite内置图片引用(更推荐)
无需拼接外部URL,直接通过文件ID使用NetSuite原生的XML标签或协议引用图片,彻底规避URL转义问题,同时适配不同NetSuite环境域名:
var myImageFromFileCabinet = file.load({id:10202}); // 方式1:使用NetSuite专属<nsimg>标签 xmlStr = `<body><nsimg fileId="${myImageFromFileCabinet.id}" width="200" height="200"></nsimg></body>`; // 方式2:使用netsuite://协议(兼容标准<img>标签) // xmlStr = `<body><img src="netsuite://${myImageFromFileCabinet.id}"></body>`; let pdfFile = render.xmlToPdf({ xmlString: xmlStr }); context.response.writeFile({ file: pdfFile, isInline: true });
内容的提问来源于stack exchange,提问作者Jebathon
相关产品推荐
相关产品推荐

