pdf - 使用 Netsuite SuiteScripts 2.0 中的高级 PDF 模板将打印按钮添加到供应商信用(查看模式)
问题描述
由于我自己在创建打印按钮时遇到了一些问题,因此我想在此处提供我的脚本来创建打印按钮。我希望它会有所帮助:-)
您只需要集成三个脚本并更改各自脚本中的 ID。
Suitelet 脚本 (vc_print_button_suitelet.js):
define(['N/render', 'N/record', 'N/xml'], function(render, record, xml)
{
function onRequest(context) {
var custom_id = context.request.parameters.custom_id;
var pdfFileName = "vendorcredit";
var renderer = render.create();
var content = renderer.addRecord({
templateName: 'record',
record: record.load({
type: record.Type.VENDOR_CREDIT,
id: custom_id
})
});
renderer.setTemplateByScriptId("CUSTTMPL_112_5298640_SB1_621");
context.response.setHeader({
name: 'content-disposition',
value: 'inline; filename="' + pdfFileName + '_' + custom_id + '.pdf"'
});
context.response.writeFile(renderer.renderAsPdf());
}
return {
onRequest: onRequest
}
})
客户端脚本(vc_print_button_client.js):
define(['N/url', 'N/currentRecord'], function(url, currentRecord) {
var exports = {};
function pageInit(context) {
// TODO
}
function onButtonClick() {
var suiteletUrl = url.resolveScript({
scriptId: 'customscript_vc_print_button_suitelet',
deploymentId: 'customdeploy_vc_print_button_suitelet',
returnExternalUrl: false,
params: {
custom_id: currentRecord.get().id,
},
});
window.open(suiteletUrl);
}
exports.onButtonClick = onButtonClick;
exports.pageInit = pageInit;
return exports;
});
事件脚本(vc_print_button_event.js):
define([], function() {
var exports = {};
function beforeLoad(context) {
context.form.addButton({
id: "custpage_vcpb",
label: "Print",
functionName: "onButtonClick"
});
context.form.clientScriptModulePath = "SuiteScripts/vcPrintButton/vc_print_button_client.js";
}
exports.beforeLoad = beforeLoad;
return exports;
});
解决方案
在浏览器中显示 PDF 取决于几件事。一个是您的浏览器是如何设置来处理 PDF 的,而您对此无能为力。另一个是确保您设置了内容处置标头:
response.setHeader({name:'content-disposition', value: 'inline; filename="'+ pdfFileName +'"'});
您的 PDF 正在生成,但未从记录中获取值。根据提供的代码,您的模板应该引用字段
${vendorcredit.tranid}
,<#list vendorcredit.apply as item>...</#list>
如果它正确执行,那么您可能希望将您的模板代码添加到问题中。
推荐阅读
- javascript - 如何在 web3.js 中将 uint32[]、uint8[] 参数传递给智能合约
- oracle - PL/SQL 如何修复进程标志 id=4 错误打印以及如何显示错误消息
- wordpress - 我可以在 WordPress 中包含 PayPal 和 SSLCOMMERZ 吗?
- ruby-on-rails - rails 6 react error importing component module not found 无法解决
- python - 如何将 PDF 中的数据抓取到 Excel 中
- java - 使用带有 spring data jpa 的weld-junit 作为轻量级 arquillian 替代品的经验?
- flutter - 错误显示:多个小部件使用相同的 GlobalKey
- node.js - 如何知道 node 是否安装了 homebrew 或 nvm?
- ios - 为什么某些 Apple Wallet 生成的 QR 码包含这么多额外的垃圾?
- sql - 将 JSON 文本插入 DB2 表