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