У нас есть приложение со множеством отчетов, и некоторые из этих отчетов имеют сложные циклы печати.
Когда-то (IE PowerPlant, Carbon, Core Printing) мы использовали для создания циклов печати, которые имели какую-то пару BeginPage() / EndPage(). Часто эти пары были встроены в логику цикла печати отчета.
В результате многие отчеты не разбивались на страницы перед печатью, а разбивались на страницы по мере их печати. Эти отчеты итерировали по тысячам объектов и заполняли как можно большую часть страницы, затем вызывали EndPage(), а затем переходили к следующей странице, вызывая BeginPage(), сохраняя при этом сложное «состояние» исходных данных. печатный отчет о проделанной работе.
Поскольку большая часть Core Printing устарела, КАЖЕТСЯ, что с логикой NSPrint подход печатного отчета, управляющего разбиением на страницы, невозможен. NSPrintOperation в значительной степени хочет иметь возможность запрашивать полную страницу для рисования drawRect пользовательского NSView, и этот пользовательский NSView лучше иметь возможность начинать с ЛЮБОЙ страницы. Означает ли это, что КАЖДЫЙ отчет должен быть предварительно разбит на страницы?
Кажется, есть другой метод, который является частью «автоматической» нумерации страниц:
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;
Если я правильно читаю документацию, скажем, у меня был 10-страничный отчет, в котором мне нужно было найти подходящие места для разделения. ВЫГЛЯДИТ, что я могу рассматривать этот отчет как один длинный просмотр, а затем вызывать описанный выше метод, пока я нахожусь в своем drawRect, в результате чего страница, которую я рисую, становится КОРОЧЕ, и, таким образом, отодвигая материал на следующую страницу.
В документации мало подробностей о том, как такие корректировки будут распространяться на десятки (или сотни) страниц.
Существуют ли какие-либо другие методы управления печатью и разбиением на страницы из кода генерации отчетов, кроме пассивных подходов, описанных выше?