Pdf 在freemarker中拼接字符串的中间?

Pdf 在freemarker中拼接字符串的中间?,pdf,netsuite,freemarker,Pdf,Netsuite,Freemarker,我正在尝试使用Freemarker拼接Netsuite Advanced PDF中的字符串。我已经阅读了字符串内置的文档,不确定这是怎么可能的 我有一个表,应该包含一个freetext变量。如果太长的话,我想让文本溢出到下一个td,但我不知道这是否可行。我想如果字符串中有一定数量的字符,我可以尝试拼接一半,然后将其第二部分放到下一个td中。这样做会在生成PDF时产生一个错误,即范围超出范围 我想做的是可能的还是我走错了方向?相关代码如下 <td style="background-colo

我正在尝试使用Freemarker拼接Netsuite Advanced PDF中的字符串。我已经阅读了字符串内置的文档,不确定这是怎么可能的

我有一个表,应该包含一个freetext变量。如果太长的话,我想让文本溢出到下一个td,但我不知道这是否可行。我想如果字符串中有一定数量的字符,我可以尝试拼接一半,然后将其第二部分放到下一个td中。这样做会在生成PDF时产生一个错误,即范围超出范围

我想做的是可能的还是我走错了方向?相关代码如下

<td style="background-color:#dce6f1" colspan="4"><strong>Additional Items:</strong>${record.custbody387[0..*50]}</td>
    </tr>
    <tr>
    <td colspan="4">${record.custbody387[51..*100]}</td>
    </tr>
    <tr>
     <td colspan="4" style="background-color:#dce6f1">This is Note 3</td>
    </tr>
    <tr>
其他项目:${record.custbody387[0..*50]}
${record.custbody387[51..*100]}
这是注3

您可以使用substring函数,但仍需要检查限制

我使用宏,如:

<#macro lim val len><#if val?length < len>${val}<#else>${val?substring(0,len)}</#if></#macro>
${val}${val?子字符串(0,len)}
然后会像这样使用:

<@lim val="${orderAddress.addressee}" len=35 />

因此,您可以创建自己的宏,以确保至少有51个字符可以启动。它可能看起来像:

<#macro lim val><#if val?length gte 51>${val[51..*100]}</#if></#macro>
${val[51..*100]}

注意:Freemarker宏位于文件的顶部(与BFO宏不同,BFO宏位于
元素中)

您可以使用substring函数,但仍需要检查限制

我使用宏,如:

<#macro lim val len><#if val?length < len>${val}<#else>${val?substring(0,len)}</#if></#macro>
${val}${val?子字符串(0,len)}
然后会像这样使用:

<@lim val="${orderAddress.addressee}" len=35 />

因此,您可以创建自己的宏,以确保至少有51个字符可以启动。它可能看起来像:

<#macro lim val><#if val?length gte 51>${val[51..*100]}</#if></#macro>
${val[51..*100]}

注意:Freemarker宏位于文件的顶部(与BFO宏不同,BFO宏位于
元素中)

您可以简单地使用
#如果
,则在第二个
td
中使用
,以避免引起错误的情况。获取一个切片(预定义大小)也可以泛化为一个函数(或宏,但函数更适合于此),但如果只调用两次,则可能是一种过度操作:

<#function getSlice(s, partNo)>
  <#local start = 50 * (partNo - 1)>
  <#return (s?length <= start)?then("", s[start..*50])>
</#function>

<tr>
  <td style="background-color:#dce6f1" colspan="4"><strong>Additional Items:</strong>
    ${getSlice(record.custbody387, 1)}
  </td>
</tr>
<tr>
  <td colspan="4">
    ${getSlice(record.custbody387, 2)}
  </td>
</tr>


您可以简单地使用
#if
?然后在第二个
td
中使用
,以避开导致错误的情况。获取一个切片(预定义大小)也可以泛化为一个函数(或宏,但函数更适合于此),但如果只调用两次,则可能是一种过度操作:

<#function getSlice(s, partNo)>
  <#local start = 50 * (partNo - 1)>
  <#return (s?length <= start)?then("", s[start..*50])>
</#function>

<tr>
  <td style="background-color:#dce6f1" colspan="4"><strong>Additional Items:</strong>
    ${getSlice(record.custbody387, 1)}
  </td>
</tr>
<tr>
  <td colspan="4">
    ${getSlice(record.custbody387, 2)}
  </td>
</tr>


谢谢,我最后用了一个“如果”来完成这项任务。谢谢,我最后用了一个“如果”来完成这项任务。