Помощь - Поиск - Пользователи - Календарь
Полная версия: Как разбить документ на страницы?
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Бродяжник
же не манж па сис жур... ypriamii.gif
Суть проблемы такова: Есть некая таблица данных. Ее нужно распечатывать в ДОСе (да! да!) на матричном принтере. На отдельных листах. При этом на каждом листе нужно печатать шапку. На первом листе шапка толстая, а на последующих - попроще. На каждом листе нужно печатать текст "Лист NNN из MMM листов", то есть общее число листов нужно вычислить заранее. После таблицы идет многострочная подпись. Необходимо, чтобы а) подпись не разрывалась, и б) на листе с подписью было не менее одной строки данных, ну и само собой шапка.
Т.е., имеем варианты:
- все влезает на один лист (толстая шапка, таблица, подпись)
- на один лист влезает все, кроме подписи (всей, или куска), поэтому на первом листе печатаем на одну строку меньше, чем можно было бы, а на втором - тонкую шапку, одну строку таблицы и подпись.
- все влезает на два листа (шапка+кусок таблицы до отказа, шапка+остаток таблицы+подпись)
- и так далее.
Есть большое желание написать процедуру, которая принимала бы, как параметры, число строк таблицы, число строк на листе, число строк двух видов шапок и подписи, и исходя из этого рассчитывала общее число листов и формировала массив количеств строк таблицы на каждом листе (во как загнул!). Есть ощущение, что это возможно smile.gif , но вот ведь... не получаецца. В других программах я просто при печати каждой строки проверял, как там у меня обстоят дела с подписью? Не пора ли начинать ее втискивать? А поскольку тут надо заранее рассчитать число листов... так уже сразу рассчитать и все длины страниц, тогда будет очень простой цикл собственно печати.
Интересуют какие-нибудь свежие идеи, можно в виде псевдокода...
Lapp
Цитата(Бродяжник @ 11.01.2006 13:10) *

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

Другой идеи просто неможет быть. smile.gif

Цитата(Бродяжник @ 11.01.2006 13:10) *

Есть ощущение, что это возможно smile.gif , но вот ведь... не получаецца.

полуцца! smile.gif
ты формулу написал? покажешь?
если хочешь, я набросаю..
Lapp
Вроде вот так получилось у мя..
Я использовал следующие параметры:

n - количество строк в таблице
l - строк на одном листе (list)
t - строк в главном заголовке (title)
h - строк в заголовке на страницах (header)
f - строк в подписи (footer)
m - листов на печать

количество листов вычисляется так:

if n<=l-t-f then m:=1 else m:=2+(n-(l-t-f)) div (l-h-f)

Перед употреблением - проверить smile.gif)
Бродяжник
Спасибо!
Как проверю, доложу smile.gif
Вообще-то я уже свою проблему решил... методом не всегда научного тыка. Процедура вместе с тестовой прогой заняла 65 строк (включая пустые).
Завтра-послезавтра выложу на всеобщее осмеяние.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.