You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetSuite渲染交易表单PDF布局:缺失Logo及另外两个字段

Suitelet生成PDF缺Logo和字段?看这

场景

开发了用户事件脚本,在发票页面加载自定义按钮,点击按钮通过客户端脚本跳转至Suitelet,使用指定高级PDF模板生成发票PDF。但目前生成的PDF缺失Logo和另外两个字段,和NetSuite原生打印按钮生成的PDF存在明显差异。

我的Suitelet代码

define(['N/render', 'N/record', 'N/xml'], function(render, record, xml) {
      function onRequest(context) {
          var response = context.response;
          if (context.request.method == 'GET'){
              var ifid = context.request.parameters.custparam_ifid;
              var pdfFileName = "Invoice";
              var renderer = render.create(ifid);
              renderer.setTemplateByScriptId("CUSTTMPL_129_423403_SB5_175");
              renderer.addRecord( 'record' , record.load({
                  type: record.Type.INVOICE,
                  id: ifid
               })
              );
              //context.response.setHeader({
              //  name: 'content-disposition',
              //  value: 'inline; filename="' + pdfFileName + '_' + ifid + '.pdf"'
              //});
              //context.response.writeFile(renderer.renderAsPdf());
          }
          //Obj.save()
         // renderer.renderPdfToResponse();
          var newfile=renderer.renderAsPdf();
          context.response.writeFile(newfile, true);
       }
       return {
          onRequest: onRequest
      };
});

PDF对比

  • Suitelet生成的PDF:缺失Logo及目标字段,页面顶部无品牌标识,部分信息不完整
    Suitelet生成的PDF截图
  • NetSuite原生打印生成的PDF:包含Logo及完整字段,页面顶部显示品牌Logo,信息完整
    原生打印的PDF截图

模板中Logo对应的Freemarker代码

<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" 
"report-1.1.dtd">
<pdf> 
<head>
<#if .locale == "ru_RU">
    <link name="verdana" type="font" subtype="opentype" src="${nsfont.verdana}" src-bold="${nsfont.verdana_bold}" bytes="2" />
</#if>
<macrolist>
    <macro id="nlheader">
        <table class="header" style="width: 100%;">
            <tr>
                <td colspan="3">
                    <#if subsidiary.logo?length != 0>
                        <img src="${subsidiary.logo@url}" style="float: left; margin: 7px" />
                    <#else>
                        <#if companyInformation.logoUrl?length != 0>
                            <img src="${companyInformation.logoUrl}"style="float: left; margin: 7px"/>
                        </#if>
                        </#if>
                    <br/>
                    <br/>
                    <br/>
                    <br/>
                    <br/>
                        <span class="nameandaddress" colspan="9"><b>${record.shipaddress@label}</b></span>
                    <br/>
                    <br/>
                        <span class="nameandaddress" colspan="9">${record.shipaddress?replace("United States","")}</span>
                </td>

解决办法

问题根源

模板里通过subsidiary和companyInformation获取Logo,但当前Suitelet只向渲染器传入了发票的record对象,这两个关键数据未进入渲染上下文,导致Logo无法加载;另外两个缺失字段同理,都是模板依赖的关联数据未传入。

具体修复步骤

  1. 添加依赖模块
    在define开头补充N/config(用于读取公司信息):

    define(['N/render', 'N/record', 'N/xml', 'N/config'], function(render, record, xml, config) {
    
  2. 补全渲染器所需的关联记录
    在renderer.addRecord('record', ...)之后添加以下代码:

    // 缓存发票记录,方便读取关联字段
    var invoiceRec = record.load({type: record.Type.INVOICE, id: ifid});
    // 加载并传入子公司记录
    var subsidiaryId = invoiceRec.getValue({fieldId: 'subsidiary'});
    var subsidiaryRec = record.load({type: record.Type.SUBSIDIARY, id: subsidiaryId});
    renderer.addRecord('subsidiary', subsidiaryRec);
    
    // 加载并传入公司信息
    var companyInfo = config.load({type: config.Type.COMPANY_INFORMATION});
    renderer.addRecord('companyInformation', companyInfo);
    
  3. 修正渲染器初始化方式
    原代码中render.create(ifid)用法错误,改为标准初始化:

    var renderer = render.create();
    
  4. 处理另外两个缺失字段
    找到模板中这两个字段使用的变量名,比如如果是客户相关字段,就传入客户记录:

    var customerId = invoiceRec.getValue({fieldId: 'entity'});
    var customerRec = record.load({type: record.Type.CUSTOMER, id: customerId});
    renderer.addRecord('customer', customerRec);
    
  5. 校验脚本权限
    确保Suitelet脚本具备读取子公司、公司信息、客户等关联记录的权限,避免因权限不足导致数据读取失败。


内容的提问来源于stack exchange,提问作者Krunal Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:21:07