COLDFUSION: cfdocument и форсирование разрыва страницы - PullRequest
8 голосов
/ 22 января 2010

Я создаю динамический PDF в ColdFusion и у меня возникла проблема с «разрывом страницы». На рассматриваемой странице может быть 1 запись или более 60 записей. Каждая запись отображается в 2 рядах таблицы. Некоторые из возвращенных записей разделяются между страницами (первая строка находится в конце первой страницы, вторая строка - верхняя строка следующей).

Пример записи в отображаемом HTML:

<tr>
  <td>Title</td><td>Price</td>
  <td colspan="2">Description</td>
</tr>

По запросу клиента Я пытаюсь отобразить = <9 записей на странице </strong>.

Вот примерный пример того, что я пробовал:

<cfdocument format="PDF">
<cfoutput query = "sqllookup">
<cfset loopcount = loopcount + 1>
<cfif loopcount EQ '9'>
 <cfdocumentitem type="pagebreak" />
<cfelse>
<tr>
  <td>#Title#</td><td>#Price#</td>
  <td colspan="2">#Description#</td>
</tr>
</cfif>
</cfoutput>
</cfdocument>

Это не работает, (скрывает только 9-ую запись) . Я попробовал несколько разных идей, и в настоящее время я в тупике. Я что-то смотрю?

Заранее спасибо.

ColdFusion MX 7. (Я также выполнил оперативное исправление для проблемы с обрезкой текста. http://kb2.adobe.com/cps/402/kb402093.html)

Ответы [ 4 ]

9 голосов
/ 22 января 2010

Вы скрываете 9-ю запись, потому что вы выбираете между ее отображением и отображением:

if 9th record
    break page
else
    show record
end if

То, что вы хотите, больше похоже на:

<cfoutput query = "sqllookup">
    <!--- this is the 9th row, because 9 mod 9 is 0 --->
    <cfif not sqllookup.currentrow mod 9>
        <cfdocumentitem type="pagebreak" />
    </cfif>
    <tr>
        <td>#Title#</td><td>#Price#</td>
        <td colspan="2">#Description#</td>
    </tr>
</cfoutput>
1 голос
/ 17 мая 2012

После борьбы с этой проблемой в течение нескольких месяцев я обнаружил, что перенос содержимого td на div (т.е. <tr><td><div>Cell Contents</div></td></tr>) предотвратит разрыв страницы внутри строки. При такой настройке разрыв страницы, который обычно разделяет строку между страницами, вместо этого падает на до строки, создавая немного лишних пробелов в конце первой страницы и помещая строку в начало следующая страница.

Примечание о строках с несколькими ячейками: достаточно одного div с вложенным тд, чтобы вызвать описанное выше поведение для всей строки.

<tr>
    <td>Blah blah blah blah blah</td>
    <td>Gnar gnar gnar gnar gnar</td>
    <td><div>Soda POP soda POP soda POP</div></td>    <!--- the fix --->
    <td>Stellar!</td>
</tr>
0 голосов
/ 28 апреля 2017

Для меня, после того, как я попробовал все хитрости, подсказки на форуме и т. Д. - единственное, что работало в cf8 для больших блоков кода (включая изображения, таблицы, div-блоки и т. Д.):

  • обернуть деталь без разрыва страницы с

    <div>...</div>

  • но супер просто <br> после него в новой строке (в коде) например,

    <div> ... your stuff ... </div> <br>

это сработало, черт знает почему ...

0 голосов
/ 22 января 2010

Попробуйте добавить style="page-break-inside: avoid;" к любому элементу, который не нужно разбивать на 2 страницы.

Например,

<tr style="page-break-inside: avoid;">
   <td>#Title#</td><td>#Price#</td>
   <td colspan="2">#Description#</td>
</tr>
...