我们有一个包含许多报告的应用程序,其中一些报告具有复杂的打印循环。
回到过去(IE PowerPlant、Carbon、Core print ),我们常常创建具有某种BeginPage() / EndPage()对的打印循环。通常,这些对被嵌入到报告打印循环逻辑中。
最终的结果是,许多报表在打印前没有分页,而是在打印时分页。这些报表迭代了数以千计的对象并填满了尽可能多的页面,然后调用EndPage(),然后通过调用BeginPage()继续下一页,同时保持正在进行的打印报表的复杂“状态”。
随着大部分核心打印被弃用,似乎使用NSPrint的逻辑,打印报表驱动分页的方法是不可能的。NSPrintOperation非常希望能够请求一个完整的页面来绘制自定义的NSView的drawRect,并且自定义的NSView最好能够从任何页面开始。这是否意味着每个报告都必须预先分页?
似乎有一种不同的方法是“自动”分页的一部分:
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;如果我正确地阅读了文档,假设我有一份10页的报告,其中我需要找到合适的位置来划分。看起来我可以将该报告视为一个长视图,然后在drawRect中调用上面的方法,导致我正在绘制的页面变短,从而将材料推到下一页。
文档没有给出这些调整将如何在数十(或数百)个页面上传播的详细信息。
除了上面描述的被动方法之外,有没有其他方法可以从报表生成代码中驱动打印和分页?
发布于 2020-04-17 20:35:23
如果我没有读错文档,假设我有一份10页的报告,其中我需要找到合适的位置来划分。看起来我可以把这份报告当做一个长远的观点,
是,
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;然后,当我在drawRect中时,
调用上面的方法
不,文档是这样说的:
由子类重写的
,用于在自动分页期间调整页面高度。此方法由print:调用。视图可以提高下边缘并在newBottom中返回新值,从而防止文本行等项在页面上分割。
文档没有给出这些调整将如何在数十(或数百)个页面上传播的详细信息。
我假设下面的页面向上移动。
除了上面描述的被动方法之外,有没有其他方法可以从报表生成代码中驱动打印和分页?
是,覆盖
- (BOOL)knowsPageRange:(NSRangePointer)range;和
- (NSRect)rectForPage:(NSInteger)page;这需要对报告进行预分页。
请参阅Selecting the Page Bounds for Content That Exceed a Single Page
https://stackoverflow.com/questions/61262590
复制相似问题