2013-09-17 2 views
1

У меня есть форма, которая имеет таблицу, которая может содержать 0 строк или несколько строк. Проблема в том, что если есть несколько строк, я хочу закрыть таблицу на первой странице, прежде чем содержимое перейдет на следующую страницу. Затем создайте другую таблицу для остальных строк на следующей странице вместе с хорошими заголовками заголовков и таблиц. Жесткая часть состоит в том, что символы имеют разную ширину, и я не могу предсказать, что пользователь будет печатать, трудно вычислить, сколько символов может поместиться в строке и сколько строк может поместиться на странице. Кроме того, если пользователь вводит что-то в некоторые данные строки, он переносится во вторую строку. Распечатка выглядит плохо, когда в строке есть только несколько строк, потому что на дне есть много пробелов, поэтому я думал о добавлении в пустые строки, чтобы заполнить ее. Но опять же, я не буду точно знать, сколько строк мне нужно заполнить, прежде чем оно выйдет на следующую страницу. У кого-нибудь есть решение?Coldfusion - Dynamic Page Break

EDIT:

Извините. Чтобы быть более ясным, что я делаю, я создал форму, используя CF и HTML, которые визуально напоминают бумажный счет-фактуру. Позиции счетов можно добавлять динамически через AJAX. Там будет куча информации, которая будет заполнена сверху (название компании, адрес и т. Д.), А затем в середине есть строки счетов в таблице с заголовками столбцов, а затем под ней есть дополнительная информация для заполнения, включая поля подписи. Этот формат не может быть изменен, поскольку это требование.

Так раскладка форма:

Верхняя часть (информация, включая информацию клиента и кучу других вещей)

средней части (таблица элементов счета линии)

Нижняя секция (связка другой информации, включая поля подписи)

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

Можно добавить неограниченное количество строк счетов, так что если вы просто просто распечатаете страницу, строки счетов будут переполнены на следующую страницу, а «нижняя информация», включая подписи, будет на любой странице, на которой может отображаться последняя страница, что нежелательно. Мне это нужно, так что любое количество строк, которые могут помещаться на первой странице без переполнения формы, должно отображаться на первой странице вместе с «нижней информацией», включая подпись. Дополнительные строки отображаются на следующих страницах с заголовками «Страница продолжения» вместе с заголовками столбцов строки счетов-фактур.

Мое решение состоит в том, чтобы создать «вид печати», который создает форму с введенными данными и cfloops запрос строки счета, но только цикл достаточно, чтобы заполнить первую страницу. Если добавление другой строки делает переполнение формы, я бы остановил цикл, отобразив остальную часть формы с «нижней информацией» и сигнатурами, чтобы все это соответствовало первой странице, а затем перерыв страницы с заголовком " Страница континентов "и отобразить таблицу строк счетов с заголовками столбцов и остальными позициями счета-фактуры. Конечно, если страница продолжения будет переполняться, мне нужно будет сделать разрыв страницы и повторить процесс «Продолжение страницы». Сложная часть состоит в том, как определить, сколько строк может действительно соответствовать на странице, потому что длина данных в каждой строке зависит от ввода пользователя. Возможно, только одна строка строки счета, заполненная множеством данных, - это все, что может помещаться на первую страницу без переполнения формы. Может быть, это 10 строк строки счета, когда вводится мало данных.

Моя основная цель - сохранить всю форму на первой странице.Если добавлено несколько позиций счета, которые выталкивают нижнюю часть формы на следующую страницу, я хочу отображать только достаточные строки строки счета, чтобы сохранить форму на первой странице и иметь страницу продолжения для остальных строк счета, которая не была на последующих страницах.

Примечание: печать выполняется с помощью ссылки для печати на странице формы, в которой всплывает страница просмотра печати (без заголовка сайта и т. Д.) В другом окне. Оттуда они могут либо распечататься из браузера, либо щелкнуть ссылку для печати, которая выполняет печать на JavaScript. тот же «вид печати», который я создал для печати счета, также используется для представления PDF, созданного с использованием CFDocument. Количество символов в строке не совпадает с созданным PDF-файлом в качестве вида печати в формате HTML, поэтому еще труднее определить, сколько строк может поместиться.

+3

Задайте конкретный вопрос, и вы получите явный ответ. Ваш вопрос слишком расплывчатый, чтобы ответить. –

+0

Вы генерируете надбавку? PDF-файл? Как печатаются эти материалы? Через CFPRINT? Через веб-браузер? Чего вы действительно спрашиваете здесь? Поставьте себя на нашу обувь - кто еще не знает, о чем вы говорите, - и переформулируйте вопрос, чтобы тот, у кого есть только то, что вы говорите в вопросе, чтобы продолжить, сможет ответить на него. –

+0

Рекомендация: http://cfmlblog.adamcameron.me/2013/09/short-self-contained-correct-compilable.html. И тогда ссылка Адама Тутта включает в себя комментарий: http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx –

ответ

0

Если я правильно понимаю ваш вопрос, то PDF-файл, созданный с помощью CFDocument, представляется оптимальным решением. С помощью тега cfdocumentitem вы можете указать верхние и нижние колонтитулы, которые гарантируют, что содержимое, которое вы хотите, появится на первой странице. Переменная cfdocument.currentpagenumber может использоваться для обеспечения того, что она отображается только на первой странице, и что заголовок на страницах 2+ отображает текст «Продолжающая страница», который вы желаете. Существует также способ получить PDF-файл для автоматической печати с использованием DDX-файла, хотя это зависит от ограничений безопасности.

Вы указываете использование документа CFDocument для создания отдельного вида печати, но я не видел объяснений, почему требуется также версия HTML. Прошу прощения, если я пропустил это.

Из личного опыта с аналогичным проектом в прошлом году я бы рекомендовал не использовать CSS для этого, а вместо этого просто потребовал бы чтения PDF-файлов. Возможно, кто-то с большим мастерством, чем я мог бы заставить его работать легко, но это было не что иное, как головная боль для нас, и мы не могли заставить его работать совершенно правильно.

+0

В настоящее время я использую CFDocument для создания моих PDF-файлов. Как это делается в настоящее время, у меня есть заголовок cfdocumentitem с моим заголовком, тогда я включаю представление формы, которое содержит содержимое формы. Тогда в конце у меня есть нижний колонтитул cfdocumentitem с номером страницы. Проблема заключается в том, что число строк является переменной. Иногда это может быть только 1 строка, иногда это 100 строк. Я хочу, чтобы у меня было достаточно строк, чтобы остальная часть формы не попала на следующую страницу, и только переполнение позиций на странице продолжения. – Guest

+0

Проблема с вашим решением заключается в том, что если я добавлю содержимое формы в заголовок и нижний колонтитул cfdocumentitem, он просто сжимает текст, чтобы он вписывался в верхний и нижний колонтитулы внизу, в то время как все, что я показываю в середине, будет отображается нормальный размер. Мне нужно, чтобы он отображался в нормальном размере для всех строк и нажимал только строки, которые вызовут переполнение на страницу продолжения. Имейте в виду, что даже если я ограничу его на 5 строк на первой странице, содержимое строки может быть переменной и длинной, и в этом случае, возможно, только одна строка может помещаться на первую страницу без переполнения. – Guest

+0

CFDocument используется только для создания PDF-файла. Он разделяет вид формы с видом печати, который находится в HTML и CF для создания и заполнения формы. У меня есть вид печати, потому что в обычном пользовательском представлении они могут динамически добавлять строки счетов через ajax, и форма будет продолжать расти. В настоящее время режим печати ограничивает первую страницу, содержащую X номеров позиций, чтобы предотвратить переполнение формы. Затем остальные строки переходят на страницы продолжения. Но опять же, проблема даже в том случае, если я ограничиваю строки X, если строка 1 содержит много контента, форма может переполняться, поэтому она не будет работать все время. – Guest