MacOS / appkit NSPrint logi c для печати длинных сложных отчетов - PullRequest
0 голосов
/ 17 апреля 2020

У нас есть приложение, в котором есть много отчетов, и некоторые из этих отчетов имеют сложные циклы печати. ​​

В прошлом (IE PowerPlant, Carbon, Core Printing) мы использовали для создания циклов печати, которые была какая-то пара BeginPage () / EndPage (). Часто эти пары встраивались в распечатку отчета l oop logi c.

Эффект net заключался в том, что многие отчеты не были разбиты на страницы перед печатью, а разбиты на страницы, КАК они печатались. Эти отчеты повторяли тысячи объектов и заполняли как можно большую часть страницы, затем вызывали EndPage (), а затем переходили к следующей странице, вызывая BeginPage (), сохраняя при этом сложное «состояние» объекта. отчет о ходе печати. ​​

Поскольку большая часть Core Printing устарела, ПОЭТОМУ, что с логикой NSPrint c, подход печатного отчета, управляющий разбиением на страницы, невозможен. NSPrintOperation в значительной степени хочет иметь возможность запросить полную страницу для рисования собственного NSView drawRect, и этот пользовательский NSView лучше иметь возможность начать на любой странице. Означает ли это, что КАЖДЫЙ отчет должен быть предварительно разбит на страницы?

Кажется, существует другой метод, который является частью "автоматической" нумерации страниц:

 - (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;

Если я читаю документация правильно, скажем, у меня был отчет на 10 страниц, где мне нужно было найти подходящие места для разделения. Это выглядит так, будто я могу рассматривать этот отчет как одно длинное представление, а затем вызвать вышеупомянутый метод, пока я нахожусь в моем drawRect, в результате чего страница, которую я рисую, становится SHORTER, и, таким образом, отодвигает материал на следующую страницу.

Документация не дает подробных сведений о том, как такие настройки будут распространяться на десятки (или сотни) страниц.

Существуют ли какие-либо другие методы, позволяющие выводить печать и нумерацию страниц из кода генерации отчетов, а не пассивные подходы, описанные выше?

1 Ответ

0 голосов
/ 17 апреля 2020

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

Да,

 - (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;

, а затем вызвать вышеуказанный метод, пока я нахожусь в моем drawRect

Нет, документация гласит:

Переопределяется подклассами для настройки высоты страницы при автоматической разбивке на страницы c. Этот метод вызывается print :. Представление может поднять нижний край и вернуть новое значение в newBottom, что позволяет предотвратить разделение таких элементов, как строки текста, на страницы.

документация не дает подробных сведений о том, как такие корректировки будут распространяться на десятки (или сотни) страниц.

Я предполагаю, что следующие страницы сдвигаются вверх.

Есть ли какие-либо другие методы управления печатью и нумерацией страниц из кода генерации отчетов, а не пассивные подходы, описанные выше?

Да, переопределить

- (BOOL)knowsPageRange:(NSRangePointer)range;

и

- (NSRect)rectForPage:(NSInteger)page;

Для этого необходимо предварительно разбить страницу на страницы.

См. Выбор границ страницы для содержимого, превышающего одну страницу

в Программирование печати Руководство для Ма c.

...