SuiteScript 2.0 在不保存的情况下将 PDF 渲染到浏览器
SuiteScript 2.0 Render PDF to Browser without Saving
我有一个 Suitelet 从目前没有高级 PDF 功能的各种记录类型渲染 PDF。
当我 file.save() 完成的 PDF 时一切正常,但我想要在浏览器中打开 PDF 而不先保存到文件柜的选项。
目前,脚本的动作部分是这样的:
var templateFile = config.getValue({fieldId:'custrecord_extpdf_template_xml'});
var templateHTML = file.load({id: templateFile}).getContents();
var renderer = render.create();
renderer.templateContent = templateHTML;
renderer.addRecord('record',rec);
renderer.addRecord('config',config);
if (SAVETORECORD) {
var PDF = renderer.renderAsPdf();
PDF.folder = config.getValue({fieldId: 'custrecord_extpdf_temp_folder'});
PDF.name = param.rectype + param.id + '.pdf';
var fid = PDF.save();
var attachitem = record.attach({
record: { type: 'file', id: fid },
to: { type: param.rectype, id: param.id }
})
context.response.write(file.load({id:fid}).url )
}
else {
var PDF = renderer.renderAsPdf();
PDF.name = param.rectype + param.id + '.pdf';
context.response.writeFile(PDF,false)
}
当变量 SAVETORECORD 为真时,PDF 呈现良好,并在新选项卡中打开,附加到记录,并保存到文件柜。
然而,当 SAVETORECORD 为 false 时,一个新的 window 打开但是是空白的。
Suitelet 是使用以下代码从自定义按钮触发器调用的:
var response = https.get({url: suiteletURL });
if (response.body) window.open(response.body,'_blank');
window.location.reload(true);
我试过 context.response.writeFile(PDF,false)
和 context.response.writeFile(PDF,true)
但得到的结果相同。
我在这里错过了什么?
在上面睡了一觉后,我发现我做错了什么。
要保存 PDF,代码保持原样。
要在浏览器中打开而不保存,我只需要从按钮脚本中打开 SuiteLet URL 而不是 response.body:
if (SAVERECORD) {
var response = https.get({url: suiteletURL });
if (response.body) window.open(response.body,'_blank');
}
else {
window.open(suiteletURL,'_blank');
}
window.location.reload(true);
我有一个 Suitelet 从目前没有高级 PDF 功能的各种记录类型渲染 PDF。
当我 file.save() 完成的 PDF 时一切正常,但我想要在浏览器中打开 PDF 而不先保存到文件柜的选项。
目前,脚本的动作部分是这样的:
var templateFile = config.getValue({fieldId:'custrecord_extpdf_template_xml'});
var templateHTML = file.load({id: templateFile}).getContents();
var renderer = render.create();
renderer.templateContent = templateHTML;
renderer.addRecord('record',rec);
renderer.addRecord('config',config);
if (SAVETORECORD) {
var PDF = renderer.renderAsPdf();
PDF.folder = config.getValue({fieldId: 'custrecord_extpdf_temp_folder'});
PDF.name = param.rectype + param.id + '.pdf';
var fid = PDF.save();
var attachitem = record.attach({
record: { type: 'file', id: fid },
to: { type: param.rectype, id: param.id }
})
context.response.write(file.load({id:fid}).url )
}
else {
var PDF = renderer.renderAsPdf();
PDF.name = param.rectype + param.id + '.pdf';
context.response.writeFile(PDF,false)
}
当变量 SAVETORECORD 为真时,PDF 呈现良好,并在新选项卡中打开,附加到记录,并保存到文件柜。
然而,当 SAVETORECORD 为 false 时,一个新的 window 打开但是是空白的。
Suitelet 是使用以下代码从自定义按钮触发器调用的:
var response = https.get({url: suiteletURL });
if (response.body) window.open(response.body,'_blank');
window.location.reload(true);
我试过 context.response.writeFile(PDF,false)
和 context.response.writeFile(PDF,true)
但得到的结果相同。
我在这里错过了什么?
在上面睡了一觉后,我发现我做错了什么。
要保存 PDF,代码保持原样。
要在浏览器中打开而不保存,我只需要从按钮脚本中打开 SuiteLet URL 而不是 response.body:
if (SAVERECORD) {
var response = https.get({url: suiteletURL });
if (response.body) window.open(response.body,'_blank');
}
else {
window.open(suiteletURL,'_blank');
}
window.location.reload(true);