Страница не прерывается с помощью внедрения NetSuite BFO PDF Report

Я пытаюсь изменить существующий шаблон XML для использования с реализацией генератора отчетов BFO PDF от NetSuite. Базовая структура - это таблица с двумя строками и двумя столбцами, в которой первая строка выполняет объединение столбцов. Во втором ряду один столбец заполнен данными, а другой - изображениями. Изображения маленькие, и дисплей умещается на первой странице. Однако столбец данных содержит различное количество предоставляемой информации, а часть предоставленной информации отформатирована в формате HTML (например, неупорядоченный список). Проблема в том, что иногда существует много данных, и они убегают со страницы без разрыва страницы. В некоторых случаях я могу реструктурировать данные или выполнить некоторые фокусы, чтобы либо уменьшить размер, либо разорвать блок добавления второй страницы. В таких случаях, как неупорядоченный список, я ничего не могу с этим поделать.

Я попытался навязать теги TBODY вокруг тегов TR, попытался применить атрибут page-break-inside. Ничто не похоже на работу. Например, вот что я получаю с длинным списком:

Вы можете видеть, как содержимое перекрывает нижний колонтитул страницы. И это то, что я имею для рассматриваемой строки таблицы:

<tbody page-break-inside="auto">
    <tr style="border-top:4px solid; padding-bottom:10px;" page-break-inside="auto">

Содержимое также инкапсулируется в тег DIV:

<div id="itemDetails" style="min-width: 0px; max-width:545px;">

В этом конкретном примере в исходной записи есть два поля содержимого, содержащих неупорядоченные списки в формате HTML, и ни к одному из них не применен какой-либо стиль. Вот меньший фрагмент источника (который обрезается внизу отображаемой страницы):

<ul>
  <li>All the Advantages of Altivar 31 Drive</li>
  <li>Excellent Resistance to Harsh Environments (50° C)</li>
  <li>Coated Cards as Standard (IEC 60721-3-3 Classes 3c2 and 3s2)</li>
  <li>Excellent Resistance to Power Supply and Motor Interference</li>
  <li>0.25 HP to 20 HP</li>
  <li>Single-Phase 200 V to 240 V, Three-Phase 200 V to 240 V, Three-Phase 380 V to 500 V, Three-Phase 525 V to 600 V</li>
  <li>Integrated Class 2 Emc Filter for Radiated and Conducted Emissions</li>
  <li>Din Rail Mounting</li>
</ul>

Любые предложения о том, что может помочь получить эти данные на разрыв страницы? Я чувствую, что есть очевидное решение, о котором я не думаю.

2 ответа

После попыток в течение прошлой недели решить ту же проблему, я решил сделать разрывы страниц при перечислении информации, если информация в списке длиннее, чем умещается на одной странице. Комментарий ОП указал мне в этом направлении - вам нужно использовать / опускать вложенные элементы, чтобы осуществить это.

Я использую div с page-break-inside: avoid; если длина данных, которые я собираюсь отобразить, меньше, чем умещается на одной странице. В противном случае я опускаю div и просто используйте таблицу - это позволяет разбить строки таблицы на несколько страниц.

В следующем примере мой основной объект данных searchResults, Он содержит свойство valueArr, который является массивом хэшей, которые мне нужно отобразить в распечатке. я имею styleObj.maxCoilsPerPage установите значение 30 для одного типа этой распечатки; вам нужно изменить это количество строк, которые могут поместиться на одной странице в вашем случае.

Фрагмент CSS:

.nopagebreak {
    page-break-inside: avoid;
}

HTML-фрагмент:

<#list searchResults.valueArr as item>
    <#if (item.valueArr?size lte styleObj.maxCoilsPerPage?number)>
        <div class="nopagebreak">
    </#if>
        <table>
            <tr>
                <td width="70%">${item.itemName}</td>
                ...other table data...
        </table>
    <#if (item.valueArr?size lte styleObj.maxCoilsPerPage?number)>
        </div>
    </#if>
</#list>

Я знаю, что это старый пост, но я нашел простой способ разделить длинные текстовые поля в<td>и избегайте ужасного дублирования нижнего колонтитула или разрыва страницы в заголовке таблицы, и я надеюсь, что это поможет будущим ищущим ответы!

Ниже приведен фрагмент кода из Справочного центра Netsuite, в котором используется встроенный бесплатный маркер «?split». Он разбивает длинную строку на последовательность (именно поэтому вам нужно составить список).

У меня не было таблицы предметов, поэтому я просто использовал приведенную ниже таблицу, и она отлично сработала. Просто убедитесь, что вы начинаете свой список перед строкой, с которой начнутся ваши длинные данные.

      <#list record.customfield?split("<br />") as paragraph>
 <tr>
  <td>${paragraph}</td>
 </tr>
</#list>

https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/bridgehead_4418819945.html#Adding-Page-Breaks-to-Tables

      <!-- start of item table in transaction  -->
<#list record.item as item>
  <#if item_index==0>
    <!-- Header Definition -->
    <tr>
      <th>${item.field1@label}</th>
      <th>${item.long_text_field@label}</th>
      <th>${item.field2@label}</th>
      <!-- ... -->
    </tr>
  </#if>
  <#list item.long_text_field?split( "<br />") as paragraph>
    <#if paragraph_index==0>
      <tr>
        <td>${‌item.field1}</td>
        <td>${paragraph}</td>
        <td>${‌item.field2}</td>
        <!-- ... -->
      </tr>
      <#else>
        <tr>
          <td></td>
          <td>${paragraph}</td>
          <td></td>
          <!-- ... -->
        </tr>
    </#if>
  </#list>
</#list>
<!-- end of item table in transaction  -->
Другие вопросы по тегам