Сращивание середины строки в freemarker? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь соединить строку в Netsuite Advanced PDF с помощью Freemarker.Я прочитал документацию для встроенных строк и не был уверен, как это возможно.

У меня есть таблица, которая должна включать переменную свободного текста.Я хочу, чтобы текст перекинулся на следующий тд, если он слишком длинный, но я не знаю, выполнимо ли это вообще.Я подумал, что мог бы попытаться соединить половину строки, если это определенное количество символов, а затем поместить вторую часть в следующий тд.Это приводит к ошибке при создании 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>

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вы можете просто использовать #if или ?then во втором 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>
0 голосов
/ 29 ноября 2018

Вы можете использовать функцию подстроки, но вам все еще нужно проверить пределы.

Я использую такой макрос, как:

<#macro lim val len><#if val?length < len>${val}<#else>${val?substring(0,len)}</#if></#macro>

, который затем используется как:

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

Таким образом, вы можете создать свой собственный макрос, который будет иметь по крайней мере51 символ для начала.Это может выглядеть следующим образом:

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

Примечание. Макросы Freemarker идут вверху файла (в отличие от макросов BFO, которые входят в элемент <macrolist>)

...