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

SuiteScript 2.X导出PDF时无法控制body标签内文本定位的问题

问题

我编写了一段简化的SuiteScript 2.X脚本用于打印两个标签,但导出PDF时无法控制body标签内文本的格式与位置。

代码示例:

define(["N/render"], function (render ) { 
    function onRequest(context) {

      let pdfFile = render.xmlToPdf({ xmlString: 
           '<pdf>' + 
           '<body style="height: 50px;width: 150px;">FIRST LABEL</body>' + 
           '<body style="height: 50px;width: 150px;">SECOND LABEL</body>' + 
           '</pdf>'
       });

       context.response.writeFile({ file: pdfFile, isInline: true     });   
    }

    return { onRequest: onRequest }; 
 });

我已尝试的方法:

  • 在body内添加div标签后,文本内容消失(显示空白),代码如下:
    '<pdf>' +
    '<body style="height: 50px;width: 150px;"><div>FIRST LABEL</div></body>' + 
    '<body style="height: 50px;width: 150px;"><div>SECOND LABEL</div></body>' + 
    '</pdf>'
    
  • 为body添加margin或padding样式后无效果,文本位置无变化,代码如下:
    '<pdf>' +
    '<body style="height: 50px;width: 150px; margin: 5px;">FIRST LABEL</body>' + 
    '<body style="height: 50px;width: 150px;margin: 5px;">SECOND LABEL</body>' + 
    '</pdf>'
    
  • 移除body标签改用div标签时,可通过HTML控制文本位置,但只能生成单个标签文档,而我需要生成多个标签文档。

请问如何实现多标签PDF中文本位置的控制?

解决方案

NetSuite的render.xmlToPdf对HTML结构的解析有特定规则,针对你的问题,有两种可行的解决方式:

方式一:使用<page>标签规范多页结构(推荐)

每个<page>标签对应一个独立的标签页,在<page>内部可以自由使用<div>等块级元素控制文本样式与位置,渲染引擎能正确解析内部样式。

修改后的代码示例:

define(["N/render"], function (render ) { 
    function onRequest(context) {

      let pdfFile = render.xmlToPdf({ xmlString: 
           '<pdf>' + 
           '<body>' +
               // 第一个标签页,设置尺寸、内边距,文本居中
               '<page style="width:150px; height:50px; padding:8px; border:1px solid #ccc;">' +
                   '<div style="text-align:center; line-height:34px;">FIRST LABEL</div>' +
               '</page>' +
               // 第二个标签页,文本左对齐,调整内边距
               '<page style="width:150px; height:50px; padding:8px 15px; border:1px solid #ccc;">' +
                   '<div style="text-align:left; line-height:34px;">SECOND LABEL</div>' +
               '</page>' +
           '</body>' + 
           '</pdf>'
       });

       context.response.writeFile({ file: pdfFile, isInline: true });   
    }

    return { onRequest: onRequest }; 
 });

关键要点

  • <page>是NetSuite PDF渲染支持的专用标签,用于定义单页的尺寸、边距等属性。
  • 内部<div>通过text-align控制水平位置,line-height配合页面高度实现垂直居中,padding调整文本与页边的间距。
  • 单个<body>包裹所有<page>,结构更规范,样式解析更稳定。

方式二:保留多<body>结构并调整元素类型

如果坚持使用多<body>生成多页,需要为每个<body>添加page-size属性明确指定尺寸,同时用<span>(设置display:block)替代<div>,避免内容消失问题。

代码示例:

define(["N/render"], function (render ) { 
    function onRequest(context) {

      let pdfFile = render.xmlToPdf({ xmlString: 
           '<pdf>' + 
           '<body page-size="150px 50px" style="padding:5px;">' +
               '<span style="display:block; text-align:center; line-height:40px;">FIRST LABEL</span>' +
           '</body>' + 
           '<body page-size="150px 50px" style="padding:5px;">' +
               '<span style="display:block; text-align:right; line-height:40px;">SECOND LABEL</span>' +
           '</body>' + 
           '</pdf>'
       });

       context.response.writeFile({ file: pdfFile, isInline: true });   
    }

    return { onRequest: onRequest }; 
 });

关键要点

  • 必须添加page-size属性指定页面尺寸,否则样式无法生效。
  • 用display:block的<span>模拟块级元素,避免<div>导致的内容不渲染问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:56